Win7 クライアントに DLL ファイルの更新を展開する最適な方法

Win7 クライアントに DLL ファイルの更新を展開する最適な方法

私たちは Windows 7 / Server 2008 R2 ドメイン環境を使用しています。さまざまな UI やその他の機能のための多数の内部ライブラリを備えた .NET アプリケーションがあります。私たちはそれを共有から展開します。この共有では、最新のバージョン番号を持つ各「リリース」のディレクトリが作成されます。時々、特定のニーズに合わせてアプリケーションを微調整する必要があり、次のリリースの前に緊急に変更する必要がある部門があります。私たちは、要求された変更を含むカスタム DLL ファイルをいくつか提供することで、それを行うことができます。私は、クライアント マシンがこれらの「カスタム」ファイルを自動的にチェックしてコピーする最も信頼性が高く効率的な方法を考案しようとしています。私は、これを最も効率的で信頼性が高く、集中管理され、クライアントのオーバーヘッドが最小限の方法で実行したいと考えています。できれば、展開するカスタム ファイルがある場合、共有に配置してから 24 時間以内にすべてのクライアントがそれらをコピーするようにします。それらは、現在のネットワーク リリース ディレクトリのサブフォルダーに、「Custom」などの名前で配置されます。現時点では SCCM がないため、次のオプションを検討しています。

  1. ネットワーク ディレクトリをチェックし、robocopy または xcopy を使用してローカル ファイルをコピー (上書き) するユーザー用のバッチ ファイル ログオン スクリプト。このスクリプトでは、ユーザーがログオフして再度ログオンする必要があるため、カスタム ファイルの取得に遅延が生じる可能性があります。ユーザーがこれをトリガーする簡単で信頼性の高い方法があるため、これはプラスになります。

  2. グループ ポリシーの基本設定項目で構成されたスケジュールされたタスク。ネットワーク ディレクトリでカスタム ファイルがあるかどうか、1 日に数回チェックします。これにより、ユーザー ログオン スクリプトよりも速くファイルを取得できる可能性がありますが、GPP スケジュールされたタスク項目を使用した経験はありません。セットアップと保守は信頼性が高く、簡単ですか? 繰り返しますが、このタスクはバッチ スクリプトを実行してネットワーク上のファイルをチェックし、/xo オプションで robocopy を開始します。カスタム ディレクトリにファイルを配置した場合、バージョンに関係なく、それらが必要であると想定します。ファイルの日付をチェックするだけで機能するはずなので、配置後は何度も再コピーされることはありません。

  3. 上記と同じスケジュールされたタスクですが、イベント ログ エントリに基づいてトリガーされます。これは信頼できるでしょうか? 試したことはありません。アプリケーションが起動された (または閉じられた) ことを示すイベント トリガーを見つけて、ファイルをすぐにコピーすると、ユーザーの作業が中断される可能性が低くなるため、有利になる場合があります。

  4. ファイルの管理/コピー用のグループ ポリシー基本設定項目もあることは知っています。この場合、アプリケーションの複数のバージョンにわたって一度に複数のファイルが存在する可能性があるため、管理するには手間がかかりすぎると思います。

  5. また、実際の DLL ファイルのバージョンを比較するなど、興味深いことを実行できる Powershell スクリプトも検討しましたが、これにはおそらくより多くのリソース オーバーヘッド (実行速度の低下) が必要になり、必要以上の処理を実行することになります。

他に何が最適かについてのアイデアはありますか? 最も簡単な答え (ユーザー ログオン スクリプト) が本当に最適でしょうか?

答え1

私は最終的にオプション 1 のユーザー ログオン スクリプトを選択しましたが、これはしばらくの間、確実に動作しています。ここにスクリプト全体を投稿したいところですが、内部アプリケーションの詳細が満載で、一般的な用途ではほとんど役に立ちません。最も興味深い点は、ローカルにインストールされたアプリケーションの内部バージョン番号を取得するために wmic を使用し、それを使用して展開サーバーの正しいバージョン ディレクトリを参照していることです。このコードは、wmic.exe から返された値と一致するように、Version という変数を設定します。

set "myfile=c:\\progra~2\\%AppFolder%\\AppName.exe"

for /f "tokens=*" %%f in ('wmic datafile where "name='%myfile%'" get version /value ^| findstr "="') do set "%%f"

関連情報