2015-06-21 178 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>之後),這是一種很好的做法。