そのため、ターゲット マシンにいくつかの異なる製品を自動的にインストールする、このインストーラー スクリプトを作成しました。ある時点で、マシン (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));