0

そのため、ターゲット マシンにいくつかの異なる製品を自動的にインストールする、このインストーラー スクリプトを作成しました。ある時点で、マシン (Windows 7) にMicrosoft Security Essentialsがインストールされているかどうかを確認しています。インストールされていない場合は、プログラムをインストールします。以下のコードは C# で記述されていますが、問題は他の言語にも当てはまる可能性があります。

回答に役立ついくつかの事実:

  • MSE は 64 ビット マシンでは 64 ビットであり、32 ビット マシンでは 32 ビットです (2 つの異なるインストーラーがあります)。したがって、レジストリ内のパスは常にSOFTWARE\Microsoft\Windows\CurrentVersion\Uninstallになります。
  • インストールを自動化するプロセスは、管理者として実行されます。同じディレクトリにある他のプログラムのキーを見ることができます。

レジストリ エディターでの私のビュー:

ここに画像の説明を入力

私の方法:

private static bool DoesMseExist()
{
    string location = @"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall";
    using (RegistryKey rk = Registry.LocalMachine.OpenSubKey(location))
    {
         foreach (string subKey in rk.GetSubKeyNames())
         {
              using (RegistryKey productKey = rk.OpenSubKey(subKey))
              {
                  if (productKey != null)
                  {                     
                      if (Convert.ToString(productKey.GetValue("DisplayName"))
                                       .Contains("Microsoft Security Client"))
                      {
                         return true;
                      }
                  }
              }
         }
     }
     return false;
}

これでは鍵が見つかりません。理由を発見するための支援をいただければ幸いです。

とりあえず代用として以下を使用しています。

string MseLocation = @"C:\Program Files\Microsoft Security Client\msseces.exe";
return (File.Exists(MseLocation)); 
4

1 に答える 1