1

我的目标是创建一个简单的 msi 包,它除了运行与 .msi 位于同一文件夹中的 .bat 脚本之外什么都不做。我不需要在目标机器上复制任何文件或创建文件夹等。我尝试将 Wix 3.5 与 vb-script 一起使用,它将运行我需要的 .bat。vb 代码本身运行良好,但在 .msi 内部它以一种奇怪的方式运行 - 我可以看到一个带有“路径”的消息框,我没有错误,但脚本不执行 .bat。

 <Property Id="Launch">
  <![CDATA[
  Function Main()
    Set shell = CreateObject("WSCript.shell") 
    path = Session.Property("SourceDir") 
    MsgBox path
    shell.Run path & "sample.bat", 0, False
    Set shell = Nothing
    Main = 1
  End Function
  ]]>
</Property> 
<CustomAction Id="Die"
              VBScriptCall="Main"
              Property="Launch"                   
              Return="check"              
              Impersonate="yes"/>

  <InstallExecuteSequence>
     <Custom Action='Die' Before='RegisterProduct'> NOT Installed </Custom>  
  </InstallExecuteSequence> 

我还尝试了另一种方法:

<Property Id='CMD'>cmd.exe</Property>
  <CustomAction Id='LaunchFile' Property='CMD' ExeCommand='[SourceDir]sample.bat' Return='check' Impersonate='yes'/> 

但是,如果我将“notepad.exe”放在属性中 - 一切都很好,当我使用“cmd.exe”时,控制台会在不执行我的 sample.bat 的情况下打开和关闭。如果是“notepad.exe”,则显示“sample.bat”的内容。你们能帮我解决这个问题吗?

4

2 回答 2

2

尝试添加/C到 ExeCommand

<CustomAction Id='LaunchFile' Property='CMD' ExeCommand='/C [SourceDir]sample.bat' Return='check' Impersonate='yes'/>
于 2012-08-02T19:33:59.237 回答
1

嗯,这很容易......实际上,一切都很好,但是 .bat 本身正在计算%WinDir%\System32\我刚刚放在CD %~dp0.bat 的第一行的相对路径,它开始正常工作。

于 2012-08-17T15:52:14.427 回答