返回值/使用vbscript自定义操作取消安装



我的安装程序中有一个自定义操作,它使用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(如果在消息框中按了cancel),我想取消安装。如果我的脚本返回值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。

任何建议都将不胜感激

我只接触了一点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>

如果您在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-a-c-custom-action

最新更新