7

我有一个需要从 MSI 文件执行的 VBScript。当我在 Windows 中单独运行该脚本时,它会正确执行,但是,当我从安装程序运行它时,会出现以下错误,如日志文件中所示:

Microsoft VBScript runtime error: object required: 'WScript', Line 3, Column 2

脚本如下:

sub shell(cmd)
    Set objShell = WScript.CreateObject("WScript.Shell")

    objShell.Run("""" & cmd & """")
    Set objShell = Nothing
end sub

set objFSO = CreateObject("Scripting.FileSystemObject")

strcmd32 = "C:\Path\PathToExecutable.exe"
strcmd64 = "C:\Path\PathToExecutable64.exe"

if (objFSO.FileExists(strcmd32)) then
    shell(strcmd32)
else 
    shell(strcmd64)
end if

set objFSO = Nothing

如前所述,如果我在安装程序的上下文之外运行此脚本,它运行良好。安装项目类型是 VS2010 安装和部署包(这是客户希望使用的,我不能使用其他任何东西)。有任何想法吗?

4

2 回答 2

9

在“shell”子中,我在调用“CreateObject()”之前从第一行中删除了 WScript。修改后的行现在看起来像这样:

'Note the absent reference to WScript on the call to CreateObject()
Set objShell = CreateObject("WScript.Shell")
于 2012-06-04T14:13:37.193 回答
3

如果您只有一个包含一些合并模块和应用程序文件的简单项目,您可以使用更好的工具Advanced Installer。您可以根据需要使用免费版本,即创建“简单”项目类型。添加合并模块和文件不会超过一分钟。

现在很容易的部分是您完全摆脱了自定义操作,创建可以转到文件和文件夹页面并使用上下文菜单选项或工具栏的快捷方式,您可以创建一个外部快捷方式,您可以将其配置为指向合并模块中的文件,甚至不指向包中的文件。

通过这种方式,您可以创建更简洁的安装包,更轻松,并且不必担心自定义操作失败的可能性。

于 2012-06-04T16:19:11.577 回答