2013-05-12 97 views
0

我有一個.hta應用程序和下面的代碼。VBScript - 打開帶有32位cmd的批處理文件

默認情況下,下面的命令打開file.bat在C:\ WINDOWS \ SysWow64資料 \ cmd.exe的

我如何得到它使用C打開:\ WINDOWS \ SYSTEM32 \ CMD。可執行程序?

解決方法是使用C:\ Windows \ system32 \ mshta.exe打開.hta文件而不是syswow64,但我希望看到其他想法。

Dim objShell 
Set objShell = CreateObject("WScript.Shell") 
objShell.Run "file.bat" 

非常感謝提前。

+0

什麼發人深省的問題? – 2013-05-12 16:46:42

+1

該批處理文件打開一個PowerShell腳本。出於某種原因,powershell腳本在system32 cmd中工作正常,但由於策略受限制,無法在syswow64 cmd上執行。 – AdrianM 2013-05-12 17:25:24

+1

'C:\ Windows \ system32 \ cmd.exe'是64位版本,'C:\ Windows \ Syswow64 \ cmd.exe'是32位版本,看起來很迷惑。 – 2013-05-12 22:27:40

回答

2

顯然C:\Windows\system32\cmd.exe從32位環境下啓動時實際運行C:\Windows\SysWOW64\cmd.exe。因此,正如Bill Stewart和Ilya Kurnosov所建議的那樣,您必須調整32位PowerShell的執行策略。有3種方法可以執行此操作:

  • 使用系統或域策略全局設置執行策略。然而,這條路線對你來說似乎不可行,因爲你說你在服務器上沒有管理員權限。

  • 通過在服務器上手動啓動C:\Windows\SysWOW64\WindowsPowerShell\v1.0\powershell.exe並運行命令Set-ExecutionPolicy RemoteSigned來設置每個用戶的執行策略。這必須爲每個用戶完成,並且如果執行策略被組策略鎖定(見上),將不會工作。

  • 繞道通過file.bat加入-ExecutionPolicy Bypass到PowerShell的調用命令行執行策略:

    powershell.exe -ExecutionPolicy Bypass -NoLogo -File file.ps1 
    
+0

建議的信用實際上應該去@Bill_Stewart。我只是對他的建議發表了一個小評論。 – 2013-05-15 06:45:45

+0

我不知道如何選擇他的答案,因爲他只發表評論 – AdrianM 2013-05-16 20:32:31

0

這可能會起作用。

objShell.Run "%SystemRoot%\system32\cmd.exe /c file.bat" 
+0

我認爲它也是如此,但是從32位HTA,該命令實際上啓動了32位'cmd.exe',儘管明確地調用了64位可執行文件。 – 2013-05-14 11:33:08

+3

如果您指定%SystemRoot%\ system32 \ cmd.exe,您沒有明確地從32位可執行文件調用64位cmd.exe,因爲%SystemRoot%\ system32自動被重定向到%SystemRoot%\ SysWOW64 WOW64文件系統重定向器。 – 2013-05-14 18:07:01

+0

@Bill_Stewart我明白了。感謝您的更正。 – 2013-05-15 09:50:31