Wix Toolset:若指定路径存在EXE则阻止MSI安装
解决方案:通过启动条件实现EXE存在检测并阻止安装
完全可以用Windows Installer的启动条件实现这个需求,你当前的配置逻辑有误,调整后即可正常工作:
1. 修正启动条件逻辑
你当前的启动条件<Launch Condition="MYAPPINSTALLED" Message="The App is already installed!" />是反向的——它表示「只有当EXE存在时才允许安装」,和你要的「EXE存在就阻止安装」正好相反。
正确的启动条件应该是:
<Launch Condition="NOT MYAPPINSTALLED" Message="检测到已安装桌面版程序,无法继续安装MSI版本!" />
这样当MYAPPINSTALLED属性存在(即找到了指定的EXE)时,条件NOT MYAPPINSTALLED不成立,安装程序会直接终止,并弹出你设置的提示(静默安装时也会在日志里记录该提示并终止)。
2. 保留原有的FileSearch配置
你之前写的FileSearch配置是正确的,它会在指定路径查找app.exe,找到后会将路径赋值给MYAPPINSTALLED属性:
<Property Id="MYAPPINSTALLED" Secure="yes" > <DirectorySearch Id="CheckFileDir" Path="C:\Program Files (x86)\My App Folder" AssignToProperty="yes"> <FileSearch Id="CheckFile" Name="app.exe" /> </DirectorySearch> </Property>
3. 为什么这个方案支持静默安装?
Windows Installer的启动条件检查属于安装序列的早期阶段,不管是带UI安装还是静默安装(比如用msiexec /i setup.msi /qn),都会执行这一步检查,不会因为静默跳过,完美解决你之前自定义动作的问题。
内容的提问来源于stack exchange,提问作者AdaRrsh Dubey
相关产品推荐
相关产品推荐

