2011-07-29 8 views
0

私たちの展開シナリオでUNCパスファイルのロックを解除するソリューションを見つけるのに問題があります。現在の状況は次のとおりです。UNC共有パスからのリモートロックの削除

複数のファイルサーバーマシンがあります。私たちの展開アプリケーションは、MSBUILDのドロップ位置からターゲットフォルダのセット(定義されたフィルタの使用など)に展開するようにセットアップされています。これらのファイル共有は、当社の多くのユーザーがソフトウェアを実行するために使用されます。これらのユーザーがソフトウェアを開くと、使用するファイルにリモート読み取りロックが作成されます。

デプロイヤーのこれを行う(偽装経由で)管理者アカウントがあります。また、リモートコンピュータ管理を介して手動で行うこともできます。自動ビルドでプロセスを自動化しようとすると、問題が発生します。

私たちは現在、openfiles.exeを使用してファイルを読み書きし、/ query/s // server/vを使ってIDを解析し、そのIDを使ってロックを削除しようとしていました。問題は、openfiles.exeがローカルファイルパスとUNCファイルパスを返すことです。

ファイルのUNCパスのみを知っている(ローカルパスがわからない)ファイルロックをサーバーからリモートで削除する方法はありますか?ターゲットサーバにアプリケーションを追加する権限は、必ずしも必要ではありません(多くの場合)ので、PsExec - > Handle.exeなどのソリューションは、私たちにとってはうまくいかない可能性があります。

ありがとうございました! -Corey

+0

実際の質問には答えられませんが、これは痛みの世界への急速な降下のように聞こえます。アプリケーションが実行されている間*のアプリケーションを置き換える*は、厄介な厄介なheisenbugを作成するための非常に良い方法です。同じ状況では、ネットワーク共有からユーザーマシン上のローカルディレクトリへのアクティベーション時に透過的に展開するようにアプリケーションを設定します。新しいバージョンの展開に問題はなく、アップグレードされたハイブリッドアプリケーションの半分に起因する問題もありません。 – Bevan

+1

ありがとうBevan。通常、私はあなたに同意しますが、このような状況では、ユーザーを壊すことには気をつけません。アプリケーションは読み取り専用で開かれています。アプリケーションがただちに再オープンするので、気にする必要はありません(また、不正なデータの入力を阻むDB冗長性があります)。 私の優先的な対応は共有を削除し、リモートで展開することです(クリックオンデプロイメントでは1/2の方法で展開します)。 – Infernex87

+0

UNCパスをリモートの物理パス(本質的に必要なもの)に変換する方法はわかりませんが、一意のフォルダ名(YOUR_APP_1234など)に展開して、 'openfiles'を使ってそのフォルダ名を検索できますそのフォルダ内の全員を起動し、排他ロックを取得し、ロックを展開して削除しますか? –

答えて

0

WMIを使用して、共有名とローカルパスを含む定義済み共有の一覧をWindowsコンピュータに問い合わせることができます。

のPowerShellへのWMIの強力な統合を考える - とPowerShellが生WMIよりも使用するはるかに簡単であることを考える - のローカルパスにUNCパスを変換PowerShellの関数を書くには余りにも難しいことではありませんホストマシン。出発点として

PowerShell Scripting - WmiObject Win32_Shareをチェックアウト:

をこのスクリプトの目的は、サーバー上の共有を一覧表示することです。実際、このコードはどのコンピュータでも共有を列挙します。

これを取得した場合は、結果を共有してください!

+0

以前はpowershellを使ったことがありませんでしたが、出力リダイレクトで処理できるファイルをセットアップするのは悪くないようです。私はあなたに私が見つけたものを知らせます。 – Infernex87

+0

これは正常に動作します。プログラムが動作する方法では、実際には.net System.Managementラッパークラスを使用して同じクエリを実行するだけでWMIを使用できます。 – Infernex87

関連する問題