0

我的安装程序中有一个自定义操作,它使用 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。

任何建议将不胜感激

4

2 回答 2

0

I only dabbled with WiX a little, and it's been some years since then, but I think you need to put your code in a function:

<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>
于 2013-06-27T00:03:45.890 回答
0

如果您在 UI 序列中,那么执行此操作的正确方法是显示使用您的 MSI 开发工具构建的标准对话框,如果这是选择之一,则连接 Cancel 逻辑。其他答案主要涵盖了这一点。在执行序列(来自自定义操作)中显示消息的正确方法是调用 MsiProcessMessage(或安装程序对象或 DTF 托管 CA 等效项)。如果合适,返回 IDCANCEL。

https://msdn.microsoft.com/en-us/library/aa370354(v=vs.85).aspx

http://microsoft.public.platformsdk.msi.narkive.com/oKHfPSZc/using-msiprocessmessage-in-ac-custom-action

于 2015-12-30T18:41:53.750 回答