objShell.Run Error: File Not Found

objShell.Run Error: File Not Found

我正在编写一个 HTA 脚本 "Opslag.hta",我想从中打开另一个 HTA 脚本 "update.hta".

我正在尝试打开 "update.hta",它位于主脚本的子文件夹(包含)中:

Set objShell = CreateObject("WScript.Shell")
UpdatePath = "include\update.hta"
objShell.Run (chr(34) & UpdatePath & chr(34))

但是我收到错误 "File Not Found",当系统提示我是否要继续 运行 脚本并按 "Yes" "update.hta" 实际打开。

我尝试将 "update.hta" 脚本移动到不同的位置,甚至尝试在 "UpdatePath" 中指定 "update.hta" 的完整路径。我已经尝试使用 vbQuote、双反斜杠(因为 "Opslag.hta" 位于带空格的路径中)和我能找到的所有可能的解决方案,但都没有成功。

这个帖子:File not found when using objshell.run -- vbscript,不幸的是没有帮助我。

我 运行 使用 Windows 7、64 位 - 不知道这是否与它有任何关系。

我真的希望这里有人有答案,因为我快要疯了! =)

提前致谢!

嗯嗯,看来你已经找到问题的答案了。

请相关评论者post他们的回答可能是值得的,这样您就可以将其标记为已回答。

每当我使用路径时,我都会对使用相对路径产生偏执。作为一般规则,请尝试使用绝对路径名而不是相对路径。

对于您的具体示例,我们应该尝试从 Opslag.hta 导出 update.hta 的绝对路径。我们可以使用 HTML Dom 中的 document.location 来做到这一点。例如,在我的电脑上,我在 C:\Temp\HTA\Opslag.hta 下有 Opslag.hta:

  1. document.href returns "file:///C:/Temp/HTA/Opslag.hta"
  2. 因此,需要进行一些字符串操作才能将其转换为 "C:\Temp\HTA\Opslag.hta"
  3. 然后我们可以使用 FileSystemObject 来提取 "C:\Temp\HTA" 文件夹。

另一个提示是Chr(34) 与“””相同。通常,如果您想在 VBScript 中转义双引号,您可以使用一对双引号。例如如果您希望 John says: "Hello!" 作为 VBScript 字符串,则为 "John says: ""Hello!"""

下面是说明结果的示例代码:

<!DOCTYPE html>
<head>
<title>Opslag.hta test</title>
</head>
<body>
</body>
<script language="VBScript">
Set objShell = CreateObject("WScript.Shell")
Set objFSO = CreateObject("Scripting.FileSystemObject")
htaPath = Replace(Replace(document.location, "file:///", ""), "/", "\")
htaFolder = objFSO.GetParentFolderName(htaPath)
updatePath = htaFolder + "\include\update.hta"
MsgBox updatePath
objShell.Run """" & updatePath & """"
</script>
</html>

顺便说一句,这只是一个例子。我通常不会将大型脚本 <script> 放在 <body> 之后,但是,如果您的 <script> 与您等待整个 DOM 的 HTML Document 一起工作,这通常是一个很好的做法] 加载,即将其放在 <body>.

之后

注意:我不确定这是否真的是一个答案,但根据要求...我是这样看的:

阅读代码

Set objShell = CreateObject("WScript.Shell")
UpdatePath = "include\update.hta"
objShell.Run (chr(34) & UpdatePath & chr(34))

有两种选择

  1. update.hta 找不到。在这种情况下会出现错误,hta 文件将无法打开
  2. update.hta可以查到。在这种情况下不会有错误,hta 文件将被打开

但是 none 这些备选方案与观察到的行为相匹配。 hta 文件被打开,所以找到了。但是显示错误。由于调用者中的代码不包含任何可能导致错误的内容,因此错误的来源应该在被调用的文件中。