当我在命令提示符下运行VBScript时,它工作得非常好,但不是在Inno安装程序中运行

当我在命令提示符下运行VBScript时,它工作得非常好,但不是在Inno安装程序中运行,vbscript,inno-setup,Vbscript,Inno Setup,我有一个VBScript,我写的工作非常好!当我在Windows10中从命令行运行它时,它完美地完成了我所需要的一切 cscript.exe“C:\SetupTempPath\MyScript.vbs”“第一个参数”1234“第三个参数” 由于某种原因,当我的Inno安装脚本中有它时 文件名:“{sys}\cscript.exe”\ 参数:“{tmp}\MyScript.vbs”“{code:GetStringValue}”“{#PORT}”“{#NAME}”“\ Description:“将

我有一个VBScript,我写的工作非常好!当我在Windows10中从命令行运行它时,它完美地完成了我所需要的一切

cscript.exe“C:\SetupTempPath\MyScript.vbs”“第一个参数”1234“第三个参数”
由于某种原因,当我的Inno安装脚本中有它时

文件名:“{sys}\cscript.exe”\
参数:“{tmp}\MyScript.vbs”“{code:GetStringValue}”“{#PORT}”“{#NAME}”“\
Description:“将端口设置为{#port}。”\
StatusMsg:“将端口设置为{#port}。”\
任务:设置端口号\
检查:SetTcpPort({#PORT});
当我在调试模式下运行安装程序时,它会显示以下内容

[12:37:45.377]--运行条目--
[12:37:45.378]运行方式:当前用户
[12:37:45.380]类型:Exec
[12:37:45.381]文件名:C:\WINDOWS\system32\cscript.exe
[12:37:45.425]参数:“C:\SetupTempPath\MyScript.vbs”“第一个参数”1234“第三个参数”
[12:38:04.987]进程退出代码:0
[12:38:04.995]需要重新启动Windows吗?不
[12:38:06.944]取消初始化设置。
[12:38:06.997]***安装程序退出代码:0
因此,正如您所看到的,所有问题都是通过已定义的代码函数以及Inno设置常量(定义)成功解决的

最后,我在VBScript中放了一堆MsgBox行来检查状态并查看何时出错。我最终发现了VBScript中有问题的部分(仅当从Inno安装程序运行时),所以我调整了脚本以考虑一些错误控制,下面是结果

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
Set wmiComputer=GetObject(wmiObjectQuery)
设置tcpProperties=wmiComputer.ExecQuery(wmiQuery)
MsgBox“Break!Count:&tcpProperties.Count”
如果错误号为0,则
MsgBox“查询未返回任何结果。”,0,“端口未更改!”
WScript.Quit
如果结束
经过它,一切都完全一样。
wmiObjectQuery
字符串是相同的,我创建的
wmiQuery
是相同的。除了一个之外,我没有发现任何差异。调用
ExecQuery()
时,我在命令提示符下运行它(安装程序正在等待我关闭它),它将返回两条记录。另一方面,当我让安装程序尝试并运行它时,由于
tcpProperties.Count
失败(由于未设置tcpProperties),这将导致错误控制跳闸


所以我的问题是,为什么它在命令提示符下工作得很好,而不是在Inno安装脚本上?

只是猜测:Inno安装程序执行32位的
cscript
。在命令行上执行64位
cscript
。这可能会有所不同

尝试将添加到
[Run]
条目中


Inno安装程序是32位应用程序,因此默认情况下,它将查找32位版本的
cscript
C:\Windows\SysWOW64\cscript


另请参阅Inno安装文档中的文章。

脚本运行于Inno安装程序的安全上下文中,这不是区别吗?我不确定您的意思。就安全性而言,如果我从UserA的登录名运行安装应用程序和命令提示符,那么应该使用相同的权限。不一定,通过提升的命令提示符自己运行它可能与Inno Setup执行当前用户上下文的方式完全不同。因此,通常有效的WMI命令可能会失败,就像这里发生的一样。我没有提升任何东西。而且,我已经关掉了UAC。我只是双击安装应用程序,就像双击cmd.exe应用程序一样。好的,但从您问题中的日志来看,它指向权限/上下文问题。我不建议直接驳回它,因为你认为这不是问题所在。UAC在以后的Windows版本中从未完全关闭过,但我仍然认为问题在于程序运行的环境。哈哈,我正要写下这篇评论!Inno以64位运行,命令提示符以32位运行!谢谢你,马丁!那面旗子把它钉死了!我知道这将归结为我需要使用的inno标志。Inno中有很多功能,通常有一种方法可以完成工作。PS:我认为在任何情况下,如果没有臭名昭著的@Martin编辑,我都无法发布
Inno设置
问题。-谢谢