我知道这以前有人问过,但请容忍我。我有一个实用程序,它读取注册表中的Unistall位置,然后将结果与需要删除的应用程序列表进行比较。80%的时间这是有效的,但诀窍是要删除的项目之一是反病毒(因此,它可以用一个AVG安装)。对很多公司来说,这是行不通的。下面是我如何获得安装的软件的一个片段:
const string Win32Loc = @"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall";
//const string Win32Loc = @"SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\USerData\S-1-5-18";
const string Win64Loc = @"Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall";
List<Application> apps = new List<Application>();
string location = bool64BitOs ? Win64Loc : Win32Loc;
using (RegistryKey rk = Registry.LocalMachine.OpenSubKey(location))
{
foreach (string skName in rk.GetSubKeyNames())
{
using (RegistryKey sk = rk.OpenSubKey(skName))
{
apps.Add(new Application { DisplayName = sk.GetValue("DisplayName") == null ? "" : (string)sk.GetValue("DisplayName"), AppKey = skName });
}
}
}将结果写入文本文件时如下所示:
名称InstallShield_{6811CAA0-BF12-11D4-9EA1-0050BAE317E1} PowerDVD Key
名ESC主页插件键InstallShield_{E738A392-F690-4A9D-808E-7BAF80E0B398}
名称Intuit SiteBuilder Key Intuit SiteBuilder
命名MicrosoftVisualVISUAL2.0可再发行包关键J# J# 2.0可再发行包
命名诺顿AntiVirus密钥NAV
命名WinLiveSuite键WinLiveSuite
名称: Microsoft Visual C++ 2008 ATL更新kb973924 - x86 9.0.30729.4148键{002D9D5E-29BA-3E6D-9BC4-3D7D6DBC735C
所以你会看到有些安装有密钥,有些没有,这意味着80%的工作有MSIEXEC调用的密钥,而其他的则失败。我正在使用安装程序/UserData/UserXXXXX/Products,但我不知道如何为所有用户遍历。在我提供的垃圾堆里,诺顿需要去,但我不知道该怎么做。
任何帮助都将不胜感激。
发布于 2011-05-17 14:29:35
我同意selbie关于使用"UninstallString“的评论(虽然有时您也不会使用它,但对于MSI来说,使用它可以得到GUID并使用msiexec /x {GUID})。
尽管如此,我不建议卸载诺顿A/V产品通过这种方法。因为他们的卸载程序是垃圾,经常会留下许多本应被删除的软件,赛门铁克提供了一个工具,可以安全地完成工作:诺顿移除工具。强烈推荐!
https://stackoverflow.com/questions/5950757
复制相似问题