我的安装程序中有一个自定义操作,它使用vbscript自定义操作打开一个消息框。
<CustomAction Id="EXENotFound" Script="vbscript" Return="check">
<![CDATA[
Dim i
If session.Property("REMINDEX_SHORTCUT") = "" Then
i = MsgBox(session.Property("TextProp"), 1)
End If
]]>
</CustomAction>
如果i = 2的值(如果在消息框中按下取消),我想取消安装。我想如果我的脚本返回值3,我可以取消安装,但它只返回0.我试过这个:
Dim i
If session.Property("REMINDEX_SHORTCUT") = "" Then
i = MsgBox(session.Property("TextProp"), 1)
End If
If i = 2 Then
return 3
End If
引发了一些关于'类型不匹配'的错误。
当我绝望时,我也试过这个:
<CustomAction Id="EXENotFound" Script="vbscript" Return="check">
<![CDATA[
Dim i
If session.Property("REMINDEX_SHORTCUT") = "" Then
i = MsgBox(session.Property("TextProp"), 1)
End If
If i = 2 Then
EXENotFound = 3
End If
]]>
</CustomAction>
我已经在线进行了大量研究,但未能找到如何从自定义操作中取消安装,甚至无法手动返回3。
任何建议都将不胜感激
答案 0 :(得分:0)
我只涉及WiX,从那时起已经有几年了,但我认为你需要把你的代码放在一个函数中:
<CustomAction Id="EXENotFound" Script="vbscript" Return="check">
<![CDATA[
Function AskUser
AskUser = 0
If session.Property("REMINDEX_SHORTCUT") = "" Then
AskUser = MsgBox(session.Property("TextProp"), 1)
End If
End Function
]]>
</CustomAction>
答案 1 :(得分:0)
如果您处于UI序列中,那么正确的方法是显示使用MSI开发工具构建的标准对话框,如果是其中一个选项,则连接Cancel逻辑。这主要是由其他答案所涵盖。在执行序列中显示消息(来自自定义操作)的正确方法是调用MsiProcessMessage(或安装程序对象或DTF管理的CA等效项)。如果合适,返回IDCANCEL。
https://msdn.microsoft.com/en-us/library/aa370354(v=vs.85).aspx