【问题标题】:objShell.Run Error: File Not FoundobjShell.Run 错误:找不到文件
【发布时间】:2015-09-06 21:35:10
【问题描述】:

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

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

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

但是我收到错误 “找不到文件”,当系统提示我是否要继续运行脚本并按 “是” 时,“update.hta”实际上打开了。

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

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

我在 Windows 7 64 位上运行 - 不知道这是否与它有关。

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

提前谢谢你!

【问题讨论】:

  • 如果 '"update.hta" 实际打开',那么 'File not found' 错误一定是由您未发布的代码引起的。
  • 似乎在update.hta内部产生了错误
  • 出现错误时,打开任务管理器,查看是否有两个mshta.exe进程。如果是这样,那么错误是由第二个 HTA 引起的。
  • @MCND:你是对的!该错误是在update.hta 内部引起的。早些时候测试update.hta 时,我刚刚自己打开了脚本。显然,当从我的主 HTA Opslag.hta 打开 update.hta 时,它会更改在 update.hta 中设置的一些路径变量。任何人,问题解决了!谢谢! =)
  • @MCND:请写下你的答案,我会承认的。

标签: vbscript hta


【解决方案1】:

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

可能值得让相关评论者发布他们的答案,以便您可以将其标记为已回答。

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

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

  1. document.href 返回"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>

顺便说一句,这只是一个例子。我通常不会将大型脚本&lt;script&gt; 放在&lt;body&gt; 之后,但是,如果您的&lt;script&gt;HTML Document 一起工作,您等待整个DOM 加载,即放在&lt;body&gt; 之后,这通常是一个好习惯。

【讨论】:

    【解决方案2】:

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

    阅读代码

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

    有两种选择

    1. 找不到update.hta。这种情况下会报错,不会打开hta文件
    2. 可以找到update.hta。在这种情况下不会出错,hta 文件将被打开

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

    【讨论】:

    • 你的推论帮我找到了错误,所以我接受你的回答。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-01-03
    • 2013-12-29
    • 2020-08-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多