2012-01-27 145 views
2

在我的Windows 7 64位Home Premium框中安裝PostgreSQL 9.1.2期間,掛起安裝。經過長時間的激烈搜索,我發現問題是安裝程序VB腳本掛起,等待批處理文件在隱藏窗口中完成。使用WShell啓動批處理文件時VBScript掛起。運行

予分離問題到下面的行的代碼:

Dim objShell 
Set objShell = WScript.CreateObject("WScript.Shell") 
objShell.Run "hello.bat", 1, True 

(其中1套WindowStyle於可見光和True等待完成)。 Run調用已啓動命令提示符,但未執行批處理文件。因此,它永遠不會完成。

我直接啓動cmd.exe的批處理文件,而不是解決了這個問題,根據大量的在線來源:

objShell.Run "%COMSPEC% /c hello.bat", 1, True 

由於修復埋在PostgreSQL安裝程序(我已經提交了bug report ),除非安裝程序被修改,否則我只能使用work around這個問題。

但是我的主要問題是:

  1. 爲什麼第一個電話掛?
  2. 爲什麼要使用%COMSPEC%而不是直接調用批處理?

關於#2,這可能是因爲執行.bat直接假定與.bat文件關聯的默認操作是執行它嗎?我過去(在其他機器上)將此默認操作更改爲「編輯」。如果我這樣做了,我也會掛上PostgreSQL安裝程序! (我想)

批處理文件在其他機器上正常執行。所以這檯筆記本電腦有些奇怪。所以,對於#1,我需要弄清楚爲什麼這一臺筆記本電腦是不同的。我要指出,有與批處理文件中有一些奇怪的行爲,這臺機器上(其中一個我只注意到):

  1. 的上下文菜單操作只包含「打開」,缺少「編輯」,「運行」,「運行方式」
  2. 雙擊一個批處理文件,打開命令提示符,但不執行批處理文件

在寫這個我只是注意到#2。顯然,.bat的默認操作會搞亂。昨天我幾乎把我的電腦從我的註冊表中刪除了上下文菜單處理程序,正如幾個網站試圖恢復我的「編輯」,「運行」等條目所建議的那樣。

關於問題1和2的任何意見,將不勝感激。

感謝, 埃裏克

+0

我解決了這個問題,並會在7個小時內發佈答案(新用戶,抱歉)。基本上我必須刪除這個鍵:HKCU \ Software \ Microsoft \ Windows \ CurrentVersion \ Explorer \ FileExts \ .bat,如[注意] [http://help.lockergnome.com/windows/BAT-File-Association-Broken- -ftopict514456.html) – cod3monk3y 2012-01-27 20:08:42

回答

4

問題是在.bat上創建了與cmd.exe的關聯的HKCU重寫,如this wonderful post所述。額外的幫助被發現here

我的註冊表是這樣的:

HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.bat 
    \OpenWithList 
     (Default) REG_SZ (value not set) 
     a   REG_SZ NOTEPAD.EXE 
     MRUList  REG_SZ a 
    \OpenWithProgids 
     (Default) REG_SZ (value not set) 
     batfile  REG_NONE (zero-length binary value) 
    \UserChoice 
     (Default) REG_SZ (value not set) 
     Progid  REG_SZ (Applications\cmd.exe) 

刪除整個.bat進入固定的一切。所有上下文菜單項都已正確恢復(Open,Edit,Print,Run as AdministratorTroubleshoot Compatability),然後雙擊批處理文件執行批處理。

在刪除它並雙擊我的測試批處理文件後,某些時候.bat鍵會自動重新生成。這個自動生成的條目是:

HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.bat 
    \OpenWithList 
     (Default) REG_SZ (value not set) 
    \OpenWithProgids 
     (Default) REG_SZ (value not set) 
     batfile  REG_NONE (zero-length binary value) 

最終它是導致我的問題的\UserChoice密鑰。所以我現在都清理了。我的測試腳本運行正常,我重新安裝了PostgreSQL,安裝順利。

E

+0

+1可以自行解決並分享詳細的解決方案。 – Tomalak 2012-01-30 09:32:42

0

第一個呼叫啓動直到東西告訴它關閉仍保持開放的窗口。大概hello.bat以EXIT命令終止,這當然會關閉窗口,然後您的安裝可以繼續。

但hello.bat無法在您的一臺機器上運行,所以當然窗口永遠不會關閉,並且您的安裝掛起。

通過%COMSPEC%的第二次調用打開一個窗口並使用/ C「command」選項運行CMD.EXE。/C選項的說明指出,一旦「命令」完成(或失敗),CMD.EXE將終止。你的「命令」是「hello.bat」。窗口的關閉不再依賴於hello.bat文件中的EXIT命令。即使hello.bat無法運行,該窗口也會關閉。

+1

感謝您輸入的dbenham。 hello.bat是一個簡單的「echo hello> _hello.txt」,沒有明確的EXIT。問題是hello.bat實際上沒有被調用。命令提示符出現,但批處理文件未運行。這並不是說bat文件在運行時失敗了。它根本不叫! Re:你的第二點 - 即使沒有明確的EXIT命令,批處理文件也會退出。如果批處理文件正在運行並掛起,則cmd.exe/c仍會掛起,等待命令完成。 我的問題竟然是一個文件擴展名重寫(請參閱我自己的答案)。儘管感謝您的意見! – cod3monk3y 2012-01-28 04:44:31

相關問題