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

时间:2013-06-26 23:03:28

标签: vbscript wix installer custom-action wix3.7

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

任何建议都将不胜感激

2 个答案:

答案 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

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