2016-10-04 6 views
2

HTAファイル内からバッチファイルを起動しようとしています。バッチファイルの起動は適切に(または少なくとも関連するCMDプロンプトで)開始されるように見えますが、バッチは後で約5分かかるはずです。 CMDプロセスが実行されている間、HTAウィンドウが一時停止しているように見え、CMDプロセスが終了するとすぐに閉じます。 HTAに関する他のすべてが適切に機能します。HTA内からバッチファイルを起動

目的は、HTAがバッチファイルをバックグラウンド(非表示)で起動し、バッチファイルが処理中にHTAに影響を与えないことです。バッチファイルが完了して終了すると、HTAはユーザーの情報を含む新しいHTAを起動します。

はここ

<html> 
    <head> 
    <style> 
     body { background:#fff url('../_dependencies/welcome.jpg') no-repeat center center fixed; color:#000; margin:25px; padding:0; } 
     div#gap { height:306px; } 
     div#buttons { padding-right:12px; position:absolute; right:0; } 
    </style> 
    <title>Installer</title> 
    <script language="vbscript"> 
     Sub Window_OnLoad 
     Set Shell = CreateObject("WScript.Shell") 
     Set objFSO = CreateObject("Scripting.FileSystemObject") 
     sPath = Shell.ExpandEnvironmentStrings("%curdir%") 
     Continue = Chr(34) & sPath & "_install.cmd" & Chr(34) 
     Shell.Run Continue,0,True 
     CompName = Shell.ExpandEnvironmentStrings("%computername%") 
     Const ForAppending = 8 
     textFile = sPath & "_Logs\" & CompName & ".upgraded.txt" 
     If Not objFSO.FileExists(textFile) Then 
      Set objTextFile = objFSO.CreateTextFile(textFile, True) 
      objTextFile.Close 
     End If 
     Set objTextFile = objFSO.opentextfile(textFile,ForAppending) 
     objTextFile.WriteLine("Upgrade complete on this computer." & vbCrLf & Now()) 
     objTextFile.Close 
     Set textFile = Nothing 
     self.close() 
     End Sub 
    </script> 
    <script language="javascript"> 
     window.resizeTo(620,365); 
     window.moveTo((screen.width-620)/2,(screen.height-365)/2); 
    </script> 
    <hta:application applicationname="Installer" border="none" caption="no" id="objnotitlebar" innerborder="no" maximizebutton="no" minimizebutton="no" scroll="no" showintaskbar="no" singleinstance="yes" systemmenu="no"> 
    </head> 
    <body> 
    <div id="gap"><img src="../_dependencies/waiting.gif" /></div> 
    <div id="buttons"></div> 
    </body> 
</html> 
+0

'install.cmd'のソースコードも投稿してください。 – Hackoo

答えて

0

Windowsが%curdir%変数環境を提供していない...私はそれが正常に機能していない持っているHTAです。その展開ではリテラル文字列%curdir%が生成されるため、ファイル%curdir%_install.cmdが見つからないため、コマンドプロンプトがすぐに終了する可能性があります。おそらく%cd%を意味しましたか?その変数はCMD内でのみ使用できます。

実際には、最初の場所の現在の作業ディレクトリからスクリプトを実行しますか?私は、あなたがHTAと同じディレクトリからバッチファイルを実行することを意味する可能性が高いと思います。その場所は次のように決定することができる。それは、このに行

Shell.Run Continue,0,True 

を変える手助けしていない場合

dir = objFSO.GetParentFolderName(Replace(document.location.href, "file:///", "")) 
sPath = objFSO.GetFolder(dir).Path 

は:cmd /kでバッチスクリプトを実行

Shell.Run "%COMSPEC% /k " & Continue, 1, True 

コマンドを保持します(試行された)スクリプトの実行後にプロンプ​​トが表示されるので、エラーがあるかどうかを確認できます。

+0

変数%curdir%には%〜dp0の値があらかじめ設定されています。その変数をmsgboxにすると、正しく表示されます。バッチファイルに関しては、HTAファイルが置かれているディレクトリの1つ上に配置されています。あなたの提案については、私はShell.Runコマンドを変更しましたが、今はCMDウィンドウが開いているのを見ることができますが、単にプロンプ​​トに座っているだけで、HTAで再生する必要のあるバッチファイルとアニメーションを実行していませんCMDプロンプトが開いたままである限り、画面は一時停止されます。 – user3208239

+0

'@echo hello'という行だけを含むバッチファイルでも同じ効果が得られますか? –

+0

単純なバッチファイルで、ちょうどエコーhelloとそれに続くポーズが表示され、うまく表示されます。私は元のバッチファイル内の異なるバッチファイルへの呼び出しが原因であるのだろうか?私は調べるためにいくつかのテストを行うつもりです。 〜 – user3208239

0

したがって、少しのトラブルシューティングの後、バッチスクリプトの問題は、誤って構成された開始ステートメントでした。

開始文は、このでした:私はこれにそれを変更し

@start /b /min /wait "upgradeinstaller.exe" /silent /noreboot 

@start /b /min /wait "Upgrade Installer" "upgradeinstaller.exe" /silent /noreboot 

私は明らかに起動コマンドにタイトルを追加するために必要な、そうでない場合は、スタートコマンドが最初に引用されたと思いましたテキストがタイトルだった場合、スイッチは起動に適用され、動作しません。

関連する問題