非同期 WUA 操作のガイドライン

このトピックでは、Windows Update エージェント (WUA) の非同期操作を実行する際に従うべきガイドラインについて説明します。

  • 非同期 WUA 操作では、特定の完了速度は保証されません。 非同期 WUA 操作の完了時間は、コンピューターのハードウェア、オペレーティング システムのバージョン、ネットワーク構成によって大きく異なる場合があります。 ネットワーク依存関係があり、タイムアウト パラメーターや文書化されたタイムアウト期間が含まれない他の Windows API と同様に、応答時間を保証する必要がある場合は、独自のタイムアウト メカニズムの実装を検討することをお勧めします。 たとえば、非同期 WUA メソッドを呼び出し、非同期 WUA 操作が完了したときにイベントまたはその他の同期オブジェクトを設定するワーカー スレッドを作成できます。その後、メイン スレッドは WaitForSingleObject または WaitForMultipleObjects 関数を使用することにより、タイムアウト値を指定できます。
  • 更新プログラムの検索、ダウンロード、インストール、またはアンインストールを終了する場合は、任意のスレッドから IUpdateSearcher::EndSearcherIUpdateDowloader::EndDownloadIUpdateInstaller::EndInstallIUpdateInstaller::EndUninstall を使用できます。
  • IUpdateSearcher::BeginSearchIUpdateDownloader::BeginDownloaderIUpdateInstaller::BeginInstallIUpdateInstaller::BeginUninstall を使用して更新プログラムの検索、ダウンロード、インストール、またはアンインストールを開始するときは、WUA API オブジェクトへの参照を解放するときに十分なアクセス許可を維持するようにしてください。
    • 非同期操作で使用されるコールバック オブジェクトが破棄される前に、それらが参照されていないことを確認してください。 コールバック オブジェクトの参照カウントが初期値に戻るまで待ってから、破棄します。
    • 対応する Begin メソッドから返されるジョブ オブジェクトへの参照は、コールバック オブジェクトとは異なるオブジェクトによって制御する必要があります。 循環参照を回避するために、コールバック オブジェクトとは異なるオブジェクトを使用してください。
    • コールバック オブジェクトを使用してジョブ オブジェクトへの参照を制御する場合は、コールバック関数の外部で IDownloadJob::CleanUpIInstallationJob::CleanUp、または ISearchJob::CleanUp メソッドを呼び出して、ジョブ オブジェクトをコールバック オブジェクトから切断する必要があります。 Begin メソッドによって返されるジョブ オブジェクトへの参照を解放する前に、これを行う必要があります。
  • 非同期 WUA 操作が完了していることを確認します。 関数外のすべてのコマンドが完了すると、WUA API にコールバック オブジェクトへの参照が残っている場合でも、Windows スクリプト ホストはスクリプトを終了できます。
    • CleanUp メソッドのいずれかを使用するか、コールバック関数で完了時に共有グローバル変数を設定します。
    • コールバック関数でジョブ オブジェクトに対して IDownloadJob::CleanUpIInstallationJob::CleanUp、または ISearchJob::CleanUp を決して呼び出さないでください。
    • Windows Internet Explorer で実行されているスクリプト内で確実に正しいクリーンアップ シーケンスを行うには、window.onbeforeunload を処理するときに、すべてのジョブ オブジェクトで CleanUp メソッドを呼び出します。
  • 非同期 WUA 操作にはユーザー定義データ型 (UDT) を使用しないでください。 この型は、IUpdateSearcher::BeginSearchIUpdateDownloader::BeginDownloadIUpdateInstaller::BeginInstallIUpdateInstaller::BeginUninstall ではサポートされていません。