首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过注册表卸载软件

通过注册表卸载软件
EN

Stack Overflow用户
提问于 2011-05-10 13:25:02
回答 1查看 4.5K关注 0票数 1

我知道这以前有人问过,但请容忍我。我有一个实用程序,它读取注册表中的Unistall位置,然后将结果与需要删除的应用程序列表进行比较。80%的时间这是有效的,但诀窍是要删除的项目之一是反病毒(因此,它可以用一个AVG安装)。对很多公司来说,这是行不通的。下面是我如何获得安装的软件的一个片段:

代码语言:javascript
复制
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,但我不知道如何为所有用户遍历。在我提供的垃圾堆里,诺顿需要去,但我不知道该怎么做。

任何帮助都将不胜感激。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-05-17 14:29:35

我同意selbie关于使用"UninstallString“的评论(虽然有时您也不会使用它,但对于MSI来说,使用它可以得到GUID并使用msiexec /x {GUID})。

尽管如此,我不建议卸载诺顿A/V产品通过这种方法。因为他们的卸载程序是垃圾,经常会留下许多本应被删除的软件,赛门铁克提供了一个工具,可以安全地完成工作:诺顿移除工具。强烈推荐!

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5950757

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档