2012-01-27 147 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

相关问题