当我从命令提示符而不是从 Inno Setup 中运行时,VBScript 工作得很好

标签 vbscript inno-setup

我有一个我写的 VBScript,效果很好!当我从 Windows 10 中的命令行运行它时,它可以完美地完成我需要的一切。

cscript.exe "C:\SetupTempPath\MyScript.vbs" "First Param" 1234 "Third Param"

出于某种原因,当我在我的 Inno Setup 脚本中使用它时...

Filename: "{sys}\cscript.exe"; \
  Parameters: """{tmp}\MyScript.vbs"" ""{code:GetStringValue}"" {#PORT} ""{#NAME}"""; \
  Description: "Set port to {#PORT}."; \
  StatusMsg: "Setting the port to {#PORT}."; \
  Tasks: setPortNumber; \
  Check: SetTcpPort({#PORT});

当我在 Debug模式下运行安装程序时,它显示以下...

[12:37:45.377] -- Run entry --
[12:37:45.378] Run as: Current user
[12:37:45.380] Type: Exec
[12:37:45.381] Filename: C:\WINDOWS\system32\cscript.exe
[12:37:45.425] Parameters: "C:\SetupTempPath\MyScript.vbs" "First Param" 1234 "Third Param"
[12:38:04.987] Process exit code: 0
[12:38:04.995] Need to restart Windows? No
[12:38:06.944] Deinitializing Setup.
[12:38:06.997] *** Setup exit code: 0

因此,正如您所看到的,一切都已从代码函数以及定义的 Inno Setup 常量(定义)中成功解析。

我最终在 VBScript 中放置了一堆 MsgBox 行来检查状态并查看它何时出错。我最终发现了它有问题的 VBScript 部分(仅当从 Inno Setup 运行时)所以我调整了脚本以解决一些错误控制,这是结果......

Set wmiComputer = GetObject(wmiObjectQuery)
Set tcpProperties = wmiComputer.ExecQuery(wmiQuery)

MsgBox "Break! Count: " & tcpProperties.Count
If Err.Number <> 0 Then
    MsgBox "Query returned no results.", 0, "Port not changed!"
    WScript.Quit
End If

通过它一切都是完全一样的。 wmiObjectQuery 字符串是一样的,我创建的wmiQuery 也是一样的。除了ONE 之外,我没有发现任何差异。当 ExecQuery() 被调用并且我从命令提示符运行它时(安装程序正在等待我关闭它),它返回 两个 记录。另一方面,当我让安装程序尝试运行它时,最终会触发错误控制,因为 tcpProperties.Count 失败(由于未设置 tcpProperties)。

所以我的问题是,为什么它可以在命令提示符下完美运行,而不是 Inno Setup 脚本?

最佳答案

只是一个猜测:Inno Setup 执行 32 位 cscript。在命令行上,您执行 64 位 cscript。这可以带来不同。

尝试添加 Flags: 64bit到您的 [Run] 条目。


Inno Setup 安装程序是 32 位应用程序,因此默认情况下它会找到 32 位版本的 cscript (C:\Windows\SysWOW64\cscript)。

另见 Install Mode: 32-bit vs. 64-bit Inno Setup 文档中的文章。

关于当我从命令提示符而不是从 Inno Setup 中运行时,VBScript 工作得很好,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42077128/

相关文章:

inno-setup - 如何配置 Inno Setup 卸载所有内容?

windows-installer - 将 Inno Setup 安装程序包装在 MSI 中以便更轻松地通过 AD 分发是否可行/明智?

windows - Inno Setup - 卸载程序时从 PATH 环境变量中删除路径

cmd - 每天生成日志

vbscript - 如何使用VBScript打开文件?

vbscript - "Not enough storage is available to complete this operation"对 zip 文件进行 base64 编码时

inno-setup - Inno安装程序更改Setup.tmp的任务管理器描述

javascript - javascript/vb "new ActiveXObject()"中使用的对象的技术名称是什么?

vbscript - 从 Windows CMD 调用的 .vbs 获取返回值

inno-setup - 在 Inno Setup 脚本中将一个很长的字符串参数拆分为多行