【问题标题】:Programmatically uninstalling a program using C#使用 C# 以编程方式卸载程序
【发布时间】:2011-09-20 23:07:15
【问题描述】:

之前我们发布了一个应用程序<application name>。后来发布了一个新版本的应用程序,但应用程序名称不同<company name> <application name>。但是这两个应用程序都将文件放在同一个程序文件夹中。但是我们在卸载程序中列出了两个不同的版本。

现在我们要发布一个更新的版本。我们想从用户的电脑上卸载第一个版本。如何使用 c# 实现这一点。我们使用的是 windows 7 64 位(应用程序是 32 位并安装在 x86 文件夹中)。

我没有应用程序设置,也没有应用程序密钥

【问题讨论】:

  • 打个电话msiexec /u 就不能完成这项工作吗?
  • 这些不同的版本是如何安装的?使用微星?你知道msis的产品代码和升级代码吗?

标签: c# uninstallation


【解决方案1】:

如果您的应用程序无法检测到它的早期版本(不同名称),那么您可能应该从这 2 个应用程序干扰的地方删除数据。您可以使用 File.Delete(); 执行此操作,但如果这些文件位于应用程序没有权限的地方,您应该通过添加清单文件并替换该行来强制它以管理员身份运行。

 <requestedExecutionLevel level="requireAdministrator" uiAccess="false" />

【讨论】:

    【解决方案2】:

    查看 COM WindowsInstaller 类。您需要添加对 WindowsInstaller 类的引用才能访问它。从这里您可以浏览 MSI 并在需要时对其执行操作。我在我的后期构建中使用它来修改存档以修复... Visual Studio 的未记录功能。

    // Create an Installer instance   
    MsiInstaller = Activator.CreateInstance(Type.GetTypeFromProgID("WindowsInstaller.Installer")) as WindowsInstaller.Installer;
    // Open the msi file for Read/Write   
    MsiDatabase = MsiInstaller.OpenDatabase(MsiFile.FullName, MsiOpenDatabaseMode.msiOpenDatabaseModeTransact);
    

    【讨论】:

      【解决方案3】:

      如果您有安装程序项目,您可以在安装程序属性中指定。

      见:VS2008 Setup Project: Uninstalling the previous MSI

      【讨论】:

        猜你喜欢
        • 2012-03-17
        • 2015-07-16
        • 2011-10-12
        • 1970-01-01
        • 1970-01-01
        • 2011-01-03
        • 2019-08-05
        • 1970-01-01
        相关资源
        最近更新 更多