【发布时间】: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