Wix的自定义操作无法调用vb脚本

时间:2018-08-29 06:23:24

标签: wix windows-installer

我在包装本身中有一个VB脚本。我需要使用CMD来调用它,这是调用脚本的默认方式,该方法花费太多时间,因此我尝试使用CMD和CSCRIPT来调用它,但是安装程序在安装时会引发错误。

我正在使用以下代码,该代码无法正常工作。我搜索了很多,但是没有找到解决方案。

<Binary Id="ServiceInstall"  SourceFile="..\..\..\AddVirDir.vbs" />

 <CustomAction Id="InstallService" BinaryKey ="ServiceInstall" 
               ExeCommand="CMD /C &quot;[#ServiceInstall]&quot;" 
               Execute="immediate" Return="check"  HideTarget="no" Impersonate="no"/>

2 个答案:

答案 0 :(得分:1)

服务安装和控制 :您不应使用脚本安装服务。 MSI中的内置机制非常优越。您只需使用ServiceInstallServiceControl WiX XML元素并“声明”应如何注册服务以及何时以及如何启动和停止服务:

<Component>
   <File Source="$(var.SourceDir)\WindowsService.exe" />
   <ServiceInstall Name="MyService" ErrorControl="normal" Start="auto" Type="ownProcess" />
   <ServiceControl Id="MyService" Name="MyService" Start="install" Stop="both" Remove="uninstall" Wait="yes" />
</Component>

Look! No custom actions! :-) - Just MSI auto-magic。无需为此使用任何自定义操作。只要您的服务可执行文件具有应有的功能,MSI的功能就会全面可靠。

Let me link to a similar sample on github,如果以上内容不清楚。它更加完整和详尽。


VBScript :我写这篇文章是在看到您处理服务之前。我将其放入:调用没有功能的脚本,您可以尝试如下操作:

<!-- The VBScript file -->
<Binary Id='Sample.vbs' SourceFile='Sample.vbs' />

<!-- The Custom Action -->
<CustomAction Id='Sample.vbs' VBScriptCall='' BinaryKey='Sample.vbs' 
              Execute='immediate' Return='ignore'/>

<!-- And Insert Into Installation Sequence -->
<InstallExecuteSequence>
    <Custom Action='Sample.vbs' After='AppSearch'/>
</InstallExecuteSequence>

这对于这样的脚本应该有效(Sample.vbs-没有功能,只是隐式的main函数):

MsgBox(Session.Property("ProductName"))

这里有一个有关VBScript自定义操作的答案:WIX installer execute vbscript from CustomAction


答案 1 :(得分:1)

WiX IIS元素 :如果全部是 IIS ,我将尽可能避免编写脚本和自定义操作,并使用WiX内置的IIS元素。这是a Web-installer sample from Rainer Stropek available on github.com

寻找 <iis:WebVirtualDir ... /> 等。 Find the WiX Documentation here。我相信您无需过多的自定义操作就能完成所需的工作。

DISM.exe :Stropek本人在set up IIS using DISM.exe的另一个示例源中使用自定义操作。不知道我会这样做(虽然没有其他建议),但这是自定义操作和IIS的示例。


需要速度 :关于您的安装性能问题。也许您需要禁止创建还原点并限制文件成本? Windows Installer引擎允许这样做-请参见下面的链接。我怀疑这会非常有效。我认为您的安装程序中肯定还有其他问题。一些超时问题?它可能与其他自定义操作,网络速度慢或其他问题有关。您能否详细说明您的部署方案?

无论如何,here is some documentation on speeding up MSI installations in general。本质上,MSIFASTINSTALL属性是我唯一推荐的属性。 DISABLEROLLBACK可能会导致真正的问题。


记录 :我通常建议安装开发人员enable default verbose MSI logging-如“ Globally for all setups on a machine ”部分中所述,以便在需要时始终准备好日志文件。它为 TEMP folder 中的每个MSI操作创建一个随机名称,然后按修改排序以获取最新的名称。日志文件可能会提示安装缓慢的原因-只需确定实际情况即可。抱歉,这只是显而易见的琐事,您已经设置好了。

手动创建日志文件

msiexec.exe /i C:\Path\Your.msi /L*v C:\Your.log

解释MSI日志 :有时候,解释日志文件可能很困难。 Here is an answer with some links to help with this