Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 如何防止MSI主要升级执行旧版本的自定义操作_.net_Windows Installer_Visual Studio Setup Proje - Fatal编程技术网

.net 如何防止MSI主要升级执行旧版本的自定义操作

.net 如何防止MSI主要升级执行旧版本的自定义操作,.net,windows-installer,visual-studio-setup-proje,.net,Windows Installer,Visual Studio Setup Proje,我有一批MSI安装程序是使用Visual Studio 2015安装项目编写的,它们部署了以.NET 4.6.1 AnyCPU为目标的程序集。它们都使用RemoveExistingProducts操作实现主要的升级行为,该操作在InstallInitialize之后立即排序。他们有.NET自定义操作,可以执行以下操作: 创建事件源 将TARGETDIR写入特定注册表路径以供以后使用 调整IIS虚拟目录属性 根据在msiexec命令行上传入的安装程序变量,更改已安装的web.config文件的内

我有一批MSI安装程序是使用Visual Studio 2015安装项目编写的,它们部署了以.NET 4.6.1 AnyCPU为目标的程序集。它们都使用
RemoveExistingProducts
操作实现主要的升级行为,该操作在
InstallInitialize
之后立即排序。他们有.NET自定义操作,可以执行以下操作:

  • 创建事件源
  • TARGETDIR
    写入特定注册表路径以供以后使用
  • 调整IIS虚拟目录属性
  • 根据在
    msiexec
    命令行上传入的安装程序变量,更改已安装的
    web.config
    文件的内容
到目前为止,这个系统一直运作良好。但是,我最近在上一个版本中对自定义操作程序集进行了代码更改,更改了
web.config
重写逻辑。当最新版本安装在早期版本上时,自定义操作的行为就好像它是代码的早期版本一样,这会在运行时导致错误

我可以在测试中可靠地再现这一点。如果卸载了以前的版本,然后安装了最新的版本,则会执行新的自定义操作代码。但是,如果安装了早期版本,然后安装了最新版本,则执行旧的自定义操作。看起来MSI引擎正在内存中缓存自定义操作程序集,然后对其进行升级,然后运行缓存的副本而不是新副本。在MSI安装日志中,我看到如下条目,这似乎意味着正在进行缓存:

Invoking remote custom action. DLL: C:\Windows\Installer\MSIA101.tmp, Entrypoint: ManagedInstall
显然,解决方法是告诉用户在安装最新版本之前卸载以前的版本,但我想找到更好的解决方案。是否有任何方法可以解决此问题(例如,通过更改安装顺序),或者是MSI引擎中无法更改的固有行为


问题:您对这些自定义操作使用的条件是什么?


在安装项目中,4个自定义操作使用空的
条件
属性定义。在MSI中,安装项目编译器生成了
.install
.commit
.rollback
自定义操作,条件为
$C_uu3fcb03426e0fffae124bde463aabf3e8>2
,以及
卸载
操作,条件为
$C_u3fcb0326e0fffae124bde463aabf3e8=2
。GUID是正在安装的服务exe的组件ID。

这些自定义操作使用的条件是什么?它们很可能是从旧安装程序的卸载序列运行的。@SteinÅsmul我已经更新了我的问题。如果你需要更多信息,请告诉我。