2016-10-04 4 views
2

Я пытаюсь запустить пакетный файл из HTA-файла. Кажется, что запуск командного файла начинается правильно (или, по крайней мере, связанная с ним подсказка CMD), но партия закрывается через несколько секунд, когда она занимает около 5 минут. В течение кратковременного момента выполняется CMD-процесс, появляется окно HTA для приостановки, затем закрывается, как только заканчивается процесс CMD. Все остальное о HTA функционирует должным образом.Запуск командного файла из 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%. Его расширение создает литеральную строку %curdir%, поэтому Command Prompt вероятно закрывается немедленно, потому что файл %curdir%_install.cmd не найден. Возможно, вы имели в виду %cd%? Эта переменная доступна только в CMD.

И вы действительно хотите запустить сценарий из текущего рабочего каталога в первую очередь? Я бы сказал, что более вероятно, что вы хотите запустить командный файл из того же каталога, что и HTA. Это место может быть определено следующим образом:

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

Если это не поможет изменить линию

Shell.Run Continue,0,True 

в этом:

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

Запуск пакетного сценария с cmd /k держит команду Запрос после открытия (попытки) выполняется, поэтому вы можете увидеть, были ли какие-либо ошибки.

+0

Переменная% curdir% предварительно заполнена значением% ~ dp0. Когда я передаю эту переменную, она отображается правильно. Что касается командного файла, он находится в одном каталоге, где находится файл HTA. Что касается вашего предложения, я внес изменения в команду Shell.Run, и теперь я вижу, что окно CMD открыто, но оно просто сидит за подсказкой и не запускает командный файл и анимацию, которая должна воспроизводиться на HTA экран приостанавливается до тех пор, пока приглашение CMD остается открытым. – user3208239

+0

Получаете ли вы тот же эффект с командным файлом, который содержит только строку '@echo hello'? –

+0

Нет. Простой командный файл с эхо-приветствием, сопровождаемый паузой, отображает только тонкие и денди. Интересно, связано ли это с вызовами разных пакетных файлов в исходных командных файлах? Я собираюсь выполнить еще несколько тестов, чтобы узнать. Thanx. – user3208239

0

Итак, после небольшого устранения неполадок проблема в пакетном скрипте была неверно сконфигурированной операцией начала.

Заявление Начиналось это:

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

Я изменил его к этому:

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

я, видимо, нужно добавить заголовок к команде запуска, в противном случае команда пуска думал первый цитировали текст был заголовком, затем переключатели были применены к запуску, что не работает.

Смежные вопросы