【发布时间】:2023-03-27 08:53:02
【问题描述】:
在我的 Windows 7 64 位家庭高级版机器上安装 PostgreSQL 9.1.2 期间,安装挂起。经过长时间的激烈搜索后,我发现问题是安装程序 VB 脚本被挂起,等待批处理文件在隐藏窗口中完成。
我将问题隔离到以下代码行:
Dim objShell
Set objShell = WScript.CreateObject("WScript.Shell")
objShell.Run "hello.bat", 1, True
(1 将 WindowStyle 设置为 Visible,True 等待完成)。 Run 调用已启动命令提示符,但未执行批处理文件。因此,它永远不会完成。
根据众多在线资源,我通过直接启动 cmd.exe 而不是批处理文件解决了这个问题:
objShell.Run "%COMSPEC% /c hello.bat", 1, True
由于修复隐藏在 PostgreSQL 安装程序中(并且我已经提交了 bug report),除非修改安装程序,否则我只能 work around 解决问题。
但我的主要问题是:
- 为什么第一个呼叫挂起?
- 为什么使用 %COMSPEC% 而不是直接调用批处理?
关于#2,这可能是因为直接执行 .bat 会假设与 .bat 文件关联的默认操作是执行它吗?我过去(在其他机器上)将此默认操作更改为“编辑”。如果我这样做了,我也会挂起 PostgreSQL 安装程序! (我想)
批处理文件在其他机器上正常执行。所以这台笔记本电脑有些奇怪。所以关于#1,我需要弄清楚为什么这台笔记本电脑是不同的。我应该注意到这台机器上的批处理文件有一些奇怪的行为(我刚刚注意到):
- 上下文菜单操作仅包含“打开”,缺少“编辑”、“运行”、“运行方式”
- 双击批处理文件会打开命令提示符,但不会执行批处理文件
我只是在写这篇文章时注意到了#2。显然 .bat 的默认操作搞砸了。昨天我几乎把我的电脑从我的注册表中删除了上下文菜单处理程序,这是几个试图恢复我的“编辑”、“运行”等条目的网站的建议。
对于问题 1 和 2 的任何建议将不胜感激。
谢谢, 埃里克
【问题讨论】:
-
我已经解决了这个问题,并将在 7 小时内发布答案(新用户,对不起)。基本上我不得不删除这个键: HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.bat 如注here
标签: postgresql shell vbscript batch-file installation