3

C# で ManagementObject を使用して、多数のプログラムを自動的にアンインストールするプログラムを作成しました。一部のプログラムがコンピューターを自動的に再起動し、プログラムの目的を無効にすることを除いて、正常に動作しています。すべてのアンインストールと再起動が完了するまで待機させる方法はありますか?

プログラムを実際にアンインストールする方法は次のとおりです。

static void UninstallProduct(string path)
{
  ManagementObject product = new ManagementObject(path);

  if ((product != null) && (product.Path.ClassName == "Win32_Product"))
  {
    Console.WriteLine(
      "Uninstalling: "
      + product.GetPropertyValue("Name")
      + "...");

    object result = product.InvokeMethod("Uninstall", null);
    Console.WriteLine(
      "The Uninstall method result is {0}",
      result.ToString());
  }
}
4

2 に答える 2

5

REMOVE=ALLおよびREBOOT=ReallySuppressオプションを使用して MSI (インストーラー パッケージ) を呼び出してみてください。

製品が MSI を使用する代わりにカスタム インストーラーを使用する場合、再起動をスキップするオプションがない場合があります。そのような場合、私は開発者に連絡し、管理者の同意なしにコンピューターを再起動することは、サービス拒否攻撃を構成する可能性が高いことを指摘します。つまり、コンピューティング機器の操作を妨害し、電子通信を故意に妨害または遅延させることであり、州および連邦の犯罪です。法律や訴追の脅威で彼らを打ち負かすのではなく、「彼らが責任を回避するのを助ける」のであれば、(少なくとも将来のバージョンでは) 望ましい行動の変化が得られるかもしれません.

于 2013-08-30T16:08:26.260 に答える
1

REBOOT=ReallySuppress が MSI アンインストーラーに渡されていると思われる場合に渡されない理由を理解するには、「. NET はコマンド ライン引数を使用してメソッドを呼び出さない」を参照してください。アンインストール中に強制的に再起動しないようにするには、MSI アンインストール メソッドを呼び出す前に、アンインストールするアプリケーションのすべてのプロセスを強制終了します。もちろん、この回避策は絶対確実というわけではなく、アンインストールするプログラムによって異なります。

于 2013-12-12T06:20:24.383 に答える