我有一个WiX安装程序项目,该项目利用自定义对话框询问参数以更新web.config文件并在安装时运行数据库脚本。一切正常,应用程序已安装并正确运行。
但是,卸载软件时也会显示自定义对话框,而且当然不需要(因为我没有更新web.config文件)。
有没有办法在卸载应用程序时禁止自定义对话框?
(我还应该在卸载时删除我安装的sql procs,但这不在此问题之内)。
答案 0 :(得分:2)
您的问题的解决方案是使用条件( Not REMOVE =“ALL”)来调整自定义操作。这将使操作在全新安装和维护安装上运行,但不在卸载时运行。如果您不需要在维护安装上运行,但仅在全新安装时运行,则可以将条件设置为:(未安装且未安装(REMOVE =“ALL”))。完整的MSI属性列表和简要说明:http://msdn.microsoft.com/en-us/library/aa370905(VS.85).aspx。
MSI文件中的排序和自定义操作逻辑非常复杂。尽可能避免自定义操作真的是值得的。
还有更多 - 所有MSI文件都内置支持静默安装。这意味着可以跳过整个GUI序列,并且无需用户交互即可安装MSI文件。这是通过SMS / SCCM或其他部署机制进行企业部署的关键功能。在静默模式下运行安装程序时显示自定义对话框违反了此基本MSI功能。您可以通过根据属性 UILevel :http://msdn.microsoft.com/en-us/library/aa372096(VS.85).aspx正确调整对话框的显示来解决此问题。只是为了让事情变得有趣和令人困惑微软已经在安装过程中定义了4个级别的GUI,从完全无声,通过各种选项(如仅限进度条等)...请参阅链接了解详细信息。
我可以在这里添加很多关于MSI序列,条件,自定义操作等的细节,但它不会回答你的问题。请添加任何后续问题。
答案 1 :(得分:0)
Wix片段显示自定义操作的创建及其插入InstallExecuteSequence:
<!--Custom Action Sample Section-->
<Binary Id='VBScriptCustomAction.vbs' SourceFile='VBScriptCustomAction.vbs'/>
<CustomAction Id='test' BinaryKey='VBScriptCustomAction.vbs' VBScriptCall='Hello' Return='ignore'/>
<InstallExecuteSequence>
<Custom Action="test" Sequence='4111'><![CDATA[NOT REMOVE~="ALL"]]></Custom>
</InstallExecuteSequence>
<!-- End of Custom Action Sample Section-->