我正在尝试为使用Visual Studio 2010安装程序开发的应用程序创建一个设置。 我需要做的一件事就是运行一些exe程序。 我正在使用客户行动来运行VBS。 这是我用来执行的方法:
Set objShell = CreateObject("Shell.Application")
objShell.ShellExecute """c:\prog.exe""","-parm bla" ,"","",""
这个问题是我无法等待程序完成使用此方法。 所以我尝试使用这种方法:
Set objShell = WScript.CreateObject("WScript.Shell")
objShell.Run "c:\prog.exe -parm bla",1,True
但似乎当MSI运行脚本时,dosnt具有WScript对象。 所以我的问题是我可以以某种方式从MSI获取WScript对象,还是有更好的方法来做到这一点?
答案 0 :(得分:3)
实际上,Windows Installer不直接支持WScript对象。您是否尝试直接使用“CreateObject”功能?
Set objShell = CreateObject("WScript.Shell")
答案 1 :(得分:2)
是的,您不能在MSI调用的脚本中使用WScript对象。作为一种解决方法,您可以使用Action = NewAction创建一个新的自定义操作,类型= 38,Source =(空白)TArget =通过运行以下命令将vb脚本文件添加为TARGET CScript WiTextIn.vbs mymsi.msi CustomAction NewAction目标YourVBscript.vbs。
WiTextIn文件位于C:\ Program Files \ Microsoft SDKs \ Windows \ v7.0 \ Samples \ sysmgmt \ msi \ scripts
(PS:当您尝试运行VBScript时,它可能会失败,因为vbscripts已禁用,您可能必须从注册表中删除该密钥并启用vbscript)
答案 2 :(得分:0)
这是我在我的vbs脚本中为服务打开防火墙例外所做的。我无法使用标准交互式弹出窗口来获取服务(要求获得打开防火墙的权限),因为它没有UI。
set oShell = CreateObject("WScript.shell")
oShell.run "cmd /C netsh advfirewall firewall add rule program=""C:\Program Files (x86)\foo\bar\prog.exe"" name=""my-service"" dir=in action=allow"
我将此vbs脚本添加到Setup& Deployment Project的“Commit”CustomAction中,将属性保留为默认值。
为了调试vbs阶段的问题,我使用
从DOS运行msimsiexec /i mysetup.msi /L* install.log
请注意,我最初使用的是“Wscript.CreateObject”,但失败了。这很有用。