如何以编程方式卸载应用程序

2023-12-02

I tried this,this以编程方式卸载应用程序。我没有收到任何错误或异常,但该应用程序未从我的计算机上卸载。另请参阅尝试过的代码

public static string GetUninstallCommandFor(string productDisplayName)
{
    RegistryKey localMachine = Registry.LocalMachine;
    string productsRoot = @"SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData\S-1-5-18\Products";
    RegistryKey products = localMachine.OpenSubKey(productsRoot);
    string[] productFolders = products.GetSubKeyNames();

    foreach (string p in productFolders)
    {
        RegistryKey installProperties = products.OpenSubKey(p + @"\InstallProperties");
        if (installProperties != null)
        {
            string displayName = (string)installProperties.GetValue("DisplayName");
            if ((displayName != null) && (displayName.Contains(productDisplayName)))
            {
                string uninstallCommand =(string)installProperties.GetValue("UninstallString");

                return uninstallCommand;
            }
        }
    }

    return "";        
}

请帮助我使用 C# 以编程方式卸载应用程序。


上面的例程将返回一个字符串,假设它找到了一个可能如下所示的匹配:

MsiExec.exe /X{02DA0248-DB55-44A7-8DC6-DBA573AEEA94}

您需要将其作为一个进程运行:

System.Diagnostics.Process.Start(uninstallString);

Note它可能并不总是 msiexec,它可以是程序选择指定的任何内容。如果是 msiexec,您可以附加/q参数给你的uninstallString使其以静默方式卸载(并且不会显示那些修复/删除对话框)。

Update:如果您使用的是 Windows installer 3.0 或更高版本,您还可以使用/quiet用于静默安装/卸载。基本上是一样的/qn(如果您使用的是旧版本)。Source。感谢@JRO 提出来!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何以编程方式卸载应用程序 的相关文章

随机推荐

  • 创建 Visual Studio 扩展时如何获取“源代码管理历史记录”窗口中的选定项目?

    我开发了一个Visual Studio 扩展 我将一个按钮附加到源代码管理历史记录窗口的上下文菜单 菜单上有 变更集详细信息 比较 等 我需要得到选定的历史项目从窗户看 但不知道该怎么做 Update 我使用 Team Foundation
  • 无法从客户端设备通过 C# 表单应用程序访问我的 SQL Server

    我有一个 C 应用程序连接到我的计算机上的在线服务器 当我在 Visual Studio 中测试我的应用程序时 它工作正常 但是当我将应用程序提供给客户端时 它无法工作 我在代码中直接在单击按钮事件中使用此连接字符串 Data Source
  • _app.getInitialProps 不会在每个请求上调用

    我正在根据主机名设置主题 一切都在开发模式下运行 但我只是跑了npm run build我看到了getInitialProps在构建期间被调用 我找不到任何有关何时的信息 app s getInitialProps被叫 我构建了整个应用程序
  • Git 分支名称 - 区分大小写还是不区分大小写?

    我是一个新的 git 用户 最近需要照顾一个过时的 git 存储库 这是原始状态 由 git show branch 输出 cr232 CR 232 Release dev Style Changes dev Style Changes d
  • 将 ListBox.SelectedObjectCollection 转换为 ListBox.ObjectCollection?

    是否可以将 ListBox SelectedObjectCollection 转换为 C 中的 ListBox ObjectCollection 如果是这样 我该怎么办 我有一个接受的函数List
  • robots.txt 中没有索引

    我总是阻止谷歌使用 robots txt 文件为我的网站建立索引 最近我读到了谷歌员工的一篇文章 他说你应该使用元标签来做到这一点 这是否意味着 Robots txt 不起作用 由于我正在使用 CMS 我的选择非常有限 并且仅使用 robo
  • 在 C# 中操作 Word 2007 文档 XML

    我正在尝试用 C 操作 Word 2007 文档的 XML 我已经设法找到并操作我想要的节点 但现在我似乎不知道如何将其保存回来 这是我正在尝试的 Open the document from memoryStream Package pk
  • 为什么我必须在自执行匿名函数之前添加分号? [复制]

    这个问题在这里已经有答案了 大多数情况下 Javascript 允许我们在语句末尾省略分号 然而 有趣的是 在这种情况下并非如此 var x 5 asdf function window alert Yay 除非我们在 anon 函数之前的
  • iOS 8 - 无法安装企业应用程序

    我们公司有一个应用程序 可以使用 Enterprise Distribution 通过网站下载 在 iOS 8 Beta 5 中 点击下载链接会弹出预期的弹出窗口 网站 想要安装 应用程序名称 在该对话框上点击 安装 首先会导致应用程序陷入
  • 如何将 Android 上的 SQLite 数据库备份/恢复到 Dropbox

    我目前正在开发一个使用 SQLite 数据库的 Android 应用程序 我正在寻找如何在 Dropbox 等外部服务之间备份 恢复数据库的想法 我已经进行了一些解释 如下所示 Android备份 恢复 如何备份内部数据库 在android
  • 该方法必须返回 int 类型

    public int computeStyle String season if season equals summer if this style equals toque return 8 if this style equals s
  • 将目录附加到 Windows 中的 PATH 环境变量

    所以 我有这个批处理文件 据说它将我的脚本附加到路径变量中 echo OFF setx path path cd script py 但我遇到了一些问题 附加我的 script py 将导致路径大于 1024 个字符 从而输出警告 警告 保
  • 如何在 dagger 2.10 中创建自定义作用域模块

    我正在尝试将公司应用程序迁移到 dagger 2 10 和AndroidInjector inject方法 但我想我发现了一个问题 该应用程序使用自定义作用域 就像登录功能一样 它有 3 个活动 每个活动都有自己的 dagger 模块 和一
  • 为什么双重检查锁定中使用易失性

    From 头先设计模式手册中 具有双重检查锁定的单例模式已实现如下 public class Singleton private volatile static Singleton instance private Singleton pu
  • 在 Windows 上使用 JDK 1.4 监控 Tomcat 5.5

    根据这个文档http tomcat apache org tomcat 5 5 doc monitoring html Enabling JMX Remote应该可以远程监控在 JDK 1 4 上运行的 Tomcat 5 5 服务器 但在搜
  • SQL/Windows 操作系统释放未使用的空间

    我最近对我的数据进行了一些归档 并执行了以下操作 我的数据库表包含超过 3300 万条记录 其中许多是重复的 我备份了表并将唯一数据插入到新表中 然后重命名 交换表名称 这实现了我所需要的 然而现在我只剩下两张桌子了 Table1 良好 活
  • UIImageencodeWithCoder 可以识别的选择器吗?

    我收到此错误 但我不知道如何修复它 我刚刚添加了 Apple 示例 LazyTableImages 中的延迟加载以及照片位置示例项目中的 UIImageToDataTransformer 类 2011 07 08 UIImage encod
  • 以 PHP 计算利率

    我正在尝试计算给定初始贷款金额 还款次数和还款金额的贷款利息 我似乎无法使用基本公式获得足够接近的数字 因此我一直在尝试使用牛顿拉夫森方法 可以在此处看到该方法的使用 http www efunda com formulae finance
  • “clear:both”和“overflow:hidden”是否以相同的方式使容器包裹浮动子项?

    我有一个带有浮动儿童的 div 我知道我可以通过以下两种方式拉伸高度 container border 2px solid ccc margin bottom 250px container 2 after content display
  • 如何以编程方式卸载应用程序

    I tried this this以编程方式卸载应用程序 我没有收到任何错误或异常 但该应用程序未从我的计算机上卸载 另请参阅尝试过的代码 public static string GetUninstallCommandFor string