【问题标题】:How to uninstall automatically while installing new version in msi file如何在 msi 文件中安装新版本时自动卸载
【发布时间】:2018-04-14 14:58:09
【问题描述】:

我在 VS2015 中为我的软件制作了一个 msi 项目。我制作了一个基于.Net 的桌面应用程序。我的要求是我要处理 2 个案例:--

1- 如果我们的软件已经安装,并且用户尝试安装它,它应该自动卸载现有软件并删除数据库文件(由我的应用程序创建)。

2- 如果安装的版本较低,那么它应该只卸载应用程序并保留我的数据库文件。

现在在我的安装项目中,我添加了安装和卸载的自定义操作,其中我给出了我的 dll 的路径并将安装程序类属性设置为 true。在这个 dll 中,我创建了一个继承自 System.Configuration.Install.Installer 的类并处理 Install 、 beforeInstall 和卸载,如下所示:--

    public partial class SetupManager : System.Configuration.Install.Installer
    {
        public SetupManager()
        {
            InitializeComponent();
            this.BeforeInstall += SetupManager_BeforeInstall;
            //this.Committed += new InstallEventHandler(DarkMailInstaller_Committed);
        }

        private void SetupManager_BeforeInstall(object sender, InstallEventArgs e)
        {
            MessageBox.Show("In Install event");
        }
}

现在在卸载时,我删除了数据库。如果我从控制面板卸载并且它也删除了我的数据库文件,它工作正常。

但是如果我想升级我的产品,在我的覆盖功能(如安装或安装前)被击中之前,它会显示错误“此产品的另一个版本已安装。无法继续安装此版本。配置或删除现有版本的产品,使用控制面板的添加/删除程序”。

现在我在互联网上搜索,如果我更新我的包代码或产品版本,它应该能够安装它。现在我有以下问题:--

1- 在 VS 2015 中,我在安装项目中没有任何可以设置产品版本或包代码的属性?

2- 我曾尝试使用 Orca 对其进行编辑,但即使我尝试安装已编辑的 MSI 文件(具有更新的版本号、包代码和产品代码),我也会遇到同样的错误。

3- 我不知道为什么在执行安装前事件之前会出现此错误?

4- 我发现“RemoveExistingProducts”在这种情况下会有所帮助。但我在 VS2015 中找不到这个属性/动作。我在哪里可以找到它?

有人可以帮我解决这个问题吗?

【问题讨论】:

    标签: c# visual-studio-2015 windows-installer


    【解决方案1】:

    在 Visual Studio 安装项目中,它是安装项目的 RemovePreviousVersions 属性,以及制造商、版本等其他属性。

    1. 增加安装版本的项目版本,接受更改。
    2. 将 RemovePreviousVersions 设置为 true。
    3. UpgradeCode 需要相同,所以不要更改它。
    4. 增加您需要更新的二进制文件的文件版本。

    如果您在解决方案资源管理器中选择安装项目并按 F4,您应该会看到相关属性。

    不用担心 PackageCode,因为 Visual Studio 会在每次构建时都会创建一个新的,这是理所当然的。

    Visual Studio 自定义操作均在文件安装后运行(尽管名称为“之前”),因此您无法影响安装过程。在任何情况下,您都不需要它们。

    您将获得一个 MSI,它将作为全新安装安装给新客户。它还会在安装时升级旧产品,Windows Installer 覆盖规则意味着应用程序更新的数据文件不会被替换。

    https://msdn.microsoft.com/en-us/library/windows/desktop/aa370531(v=vs.85).aspx

    生成的 MSI 将在安装结束时对 RemoveExistingProducts 进行排序。基本上你不需要担心 PackageCodes 的内部等等,因为 Visual Studio 隐藏了它们。

    【讨论】:

    • 感谢您的回答。这个对我有用。我没有足够的凭据,但对我来说绝对是 +1。
    猜你喜欢
    • 2012-10-15
    • 1970-01-01
    • 2011-11-18
    • 2017-01-07
    • 1970-01-01
    • 1970-01-01
    • 2021-05-24
    • 2014-11-21
    • 2011-01-01
    相关资源
    最近更新 更多