2015-06-21 181 views
1

我正在编写HTA脚本“Opslag.hta”,我想从中打开另一个HTA脚本“update.hta”objShell.Run错误:未找到文件

我试图打开“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位上运行 - 不知道这与它有什么关系。

我真的很希望这里有人有答案,因为我即将疯狂! =)

预先感谢您!

+1

如果''update.hta'实际打开',则'文件未找到'错误必须由您未发布的代码引起。 –

+3

看起来'error.hta'里面正在产生错误# –

+1

当发生错误时,打开任务管理器,并检查是否有两个mshta.exe进程。如果是这样,那么错误是由第二个HTA引起的。 – omegastripes

回答

0

:我不知道这是一个真正的答案,但要求......这是我看到了它:

读码

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文件已打开,因此找到它。但是显示了一个错误。由于调用程序中的代码不包含任何可能会导致错误的内容,因此错误的来源应该位于调用的文件中。

+0

你的演绎帮助我找到了错误,所以我接受你的答案。 – Sparcx

1

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

请相关评论者张贴他们的答案,以便将其标记为已回答可能是值得的。

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

对于您的具体示例,我们应该尝试从Opslag.hta推导出update.hta的绝对路径。我们可以通过使用HTML Dom中的document.location来做到这一点。举例来说,在我的电脑上,我有Opslag.htaC:\Temp\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> 

顺便说一句,这仅仅是一个例子。我通常不会在<body>之后放置大型脚本<script>,但是,如果您的<script>HTML Document一起使用,您等待整个DOM加载(即将其放在<body>之后),这是一种很好的做法。