我在包装本身中有一个VB脚本。我需要使用CMD来调用它,这是调用脚本的默认方式,该方法花费太多时间,因此我尝试使用CMD和CSCRIPT来调用它,但是安装程序在安装时会引发错误。
我正在使用以下代码,该代码无法正常工作。我搜索了很多,但是没有找到解决方案。
<Binary Id="ServiceInstall" SourceFile="..\..\..\AddVirDir.vbs" />
<CustomAction Id="InstallService" BinaryKey ="ServiceInstall"
ExeCommand="CMD /C "[#ServiceInstall]""
Execute="immediate" Return="check" HideTarget="no" Impersonate="no"/>
答案 0 :(得分:1)
服务安装和控制 :您不应使用脚本安装服务。 MSI中的内置机制非常优越。您只需使用ServiceInstall和ServiceControl 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。