【问题标题】:cscript.exe opens a windowcscript.exe 打开一个窗口
【发布时间】:2012-05-23 08:58:26
【问题描述】:

我有一个需要以 32 位运行的 vbs 文件,即使我运行的是 64 位 Windows 7。我可以用命令启动这个文件

C:\Windows\SysWOW64\cscript.exe my-file.vbs

这很好用,但它给我留下了一个多余的命令提示符窗口,我每次都必须手动关闭它。将这个 vbs 文件作为启动项运行也很麻烦。

有没有办法在后台启动我的 32 位 vbs 文件?

【问题讨论】:

    标签: vbscript windows-7-x64 wsh


    【解决方案1】:

    试试这个 64 位问题,如果可行,你可以将它与其他答案结合起来

    编辑:这里有一个关于 32/64 位问题的更深入的问题

    How do I check if wscript/cscript runs on x64 host OS?

    这里是修改后的版本,应该确保脚本在64位平台上运行

    On Error Resume Next
    Dim WshShell, OsType
    Set WshShell = CreateObject("WScript.Shell")
    OsType = WshShell.RegRead("HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment\PROCESSOR_ARCHITECTURE")
    If OsType = "x86" then
      wscript.echo "Windows 32bit system detected"
    else
      wscript.echo "Windows 64bit system detected"
      If InStr(LCase(WScript.FullName),"system32") Then 
        CreateObject("WScript.Shell").Run """%systemroot%\SysWOW64\wscript.exe"" """ & WScript.ScriptFullName & """" 
        Wscript.Quit 
      End If 
    end if
    
    Msgbox("I ran..")
    

    【讨论】:

    • 这是要走的路,虽然我不得不把支票倒过来... :-)
    • 你的意思是你使用了“If not Instr”..?然后我可以调整我的答案.. 自己无法测试,没有 64 位客户端
    • 不,我在 InStr 中检查了“system32”(这是 64 位,如图),如果是,则使用“SysWOW64”而不是“sysnative”调用 CreateObject。它现在可以在 64 位上运行,因为脚本会根据您的建议以 32 位重新启动;剩下的就是使其通用,以便可以在 32 位和 64 位上运行相同的脚本并启动正确版本的 wscript。
    • @koenig:更新了答案以供参考,如果有效,您可以试试吗?
    • 对于 64 位,您仍然需要 Wscript.Quit 在 CreateObject 之后;除此之外,它工作正常。谢谢!
    【解决方案2】:

    如果您需要使用 cscript,恕我直言,这是一个很酷的解决方案

    Const HIDDEN_WINDOW = 0
    
    strComputer = "."
    
    Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
    
    Set objStartup = objWMIService.Get("Win32_ProcessStartup")
    Set objConfig = objStartup.SpawnInstance_
    objConfig.ShowWindow = HIDDEN_WINDOW
    
    Set objProcess = GetObject("winmgmts:\\" & strComputer & "\root\cimv2:Win32_Process")
    
    objProcess.Create "Cscript.exe h:\Script\Test1.vbs", null, objConfig, intProcessID
    

    【讨论】:

    • 我尝试将此代码输入到一个新文件 test.vbs 中,并让最后一行指向我的 vbs 文件。恐怕什么也没发生。
    • 一定是 64 位的问题,我先在我的 Vista 32 位系统上试了一下,效果很好,已经试过我的第三个解决方案了吗?
    【解决方案3】:

    如果您可以使用 wscript,您可以执行以下操作,这是最简单的方法

    Set objShell = CreateObject("Wscript.Shell")
    objShell.Run "Wscript.exe h:\Script\Test1.vbs"
    

    实际上你可以作为一个单行来做(我是一个 Ruby 人 8>)

    CreateObject("Wscript.Shell").Run("Wscript.exe h:\Script\Test1.vbs")
    

    【讨论】:

    • 在 64 位世界中,如果我没记错的话,这会调用 64 位版本的 wscript.exe。当我尝试这种方法时收到的错误消息似乎指向相同的结论。
    • 你得到什么错误?看这篇文章blogs.msdn.com/b/joshpoley/archive/2008/09/18/…
    • 请在我的第三个答案中尝试解决方案
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-05-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多