2012-05-23 1 views
1

У меня есть файл vbs, который нужно запускать в 32-разрядной версии, хотя я использую 64-разрядную версию Windows 7. Я могу запустить этот файл с помощью командыcscript.exe открывает окно

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

и что работает хорошо, но это оставляет меня с проворным окном лишних команд, что я должен закрыть вручную каждый раз. Это также очень затрудняет запуск этого vbs-файла в качестве элемента запуска.

Есть ли способ запустить мой 32-битный vbs-файл в фоновом режиме?

ответ

3

Попробуйте для задачи 64-битной, если он работает вы ок п объединить его с другими ответами

EDIT: здесь вопрос, который идет более подробно на 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..") 
+0

Это был путь, хотя мне пришлось перевернуть чек с ног на голову ... :-) – koenig

+0

Вы имеете в виду, что вы использовали «If not Instr» ..? то я могу настроить свой ответ. не может проверить это самостоятельно, не имеет 64-битного клиента. – peter

+0

Нет, я проверил для «system32» (который является 64-битной фигурой) в InStr, и если это так, называется CreateObject с «SysWOW64 "вместо" sysnative ". Он работает сейчас на 64-битной основе, поскольку сценарий перезагружается в 32 бит согласно вашей рекомендации; остается только сделать его общим, поэтому один и тот же скрипт можно запустить на 32-битном и 64-битном и запустить правильную версию wscript. – koenig

0

Если вы можете использовать WScript вы могли бы сделать следующее, это самый простой подход

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

на самом деле вы можете сделать это как однострочника (я Рубин парень 8>)

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

В 64-битном мире это вызывает 64-разрядную версию wscript.exe, если я не ошибаюсь. Сообщение об ошибке, которое я получаю, когда я пытаюсь использовать этот подход, похоже, указывает на тот же вывод. – koenig

+0

какая ошибка вы получаете? см. эту статью http://blogs.msdn.com/b/joshpoley/archive/2008/09/18/running-32bit-dependent-scripts-in-a-64bit-world.aspx – peter

+0

, пожалуйста, попробуйте решение в моей третьей answer – peter

1

Если вам нужно использовать 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 
+0

Я попытался ввести этот код в новый файл test.vbs, и пусть последняя строка укажет на мой файл vbs. Боюсь, ничего не произошло. – koenig

+0

должна быть 64-разрядной проблемой, я сначала попробовал ее в своей 32-битной системе Vista, и она работала как шарм, все уже пробовали мое третье решение? – peter