所以我有我编写的这个安装程序脚本,它可以在目标机器上自动安装几个不同的产品。在某一时刻,我正在检查机器(Windows 7)是否安装了Microsoft Security Essentials - 如果没有,那么我安装该程序。下面的代码是用 C# 编写的,但该问题也可能适用于其他语言。
一些有助于回答的事实:
- MSE 在 64 位机器上是 64 位,在 32 位机器上是 32 位(有两个不同的安装程序)因此,注册表中的路径始终是: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));