MSI InstallValidate FilesInUse在shell扩展上过度活跃?

时间:2010-11-02 13:04:41

标签: shell windows-installer explorer

我正在使用Advanced Installer (MSI)为资源管理器上下文菜单安装shell扩展DLL。除了在InstallExecuteSequence中的卸载自定义操作之外,这个工作正常工作我必须向regsvr32.exe / s / u添加一个命令才能取消注册DLL。

我遇到的问题是,在后续重新安装相同产品(使用不同的产品版本和产品代码)时,首先会自动卸载应用程序,有时资源管理器不会释放导致该问题的DLL出现FilesInUse框并提示终止Explorer.exe或重新启动计算机。

因为shell扩展没有bug而且不需要更换,并且因为我没有在安装之间升级它的版本号,所以我希望避免重新安装或检查它是否正在使用,除非它的版本有改变。

我试图在[APPDIR]的MSI中添加搜索文件,但所有返回的内容都是“C:\”,尽管该文件实际上位于appdir文件夹中的其他位置

是否有一种简单的方法可以跳过重新安装文件(如果已存在)并跳过InstallValidate for FilesInUse?

1 个答案:

答案 0 :(得分:1)

您可以尝试在自定义操作上设置条件,以根据http://msdn.microsoft.com/en-us/library/windows/desktop/aa368012(v=vs.85).aspx

考虑组件状态

由于您没有更新文件版本并假设它是组件的密钥路径,因此Windows Installer不应尝试重新安装该组件。在这种情况下,像这样的条件有很大的工作机会: $ COMPONENTID = 3 其中ComponentId是拥有shell扩展的组件的标识符。在这种情况下,只有在实际(重新)安装组件“ComponentId”时才应执行CA.