Как я могу закрыть окно CMD, используя JavaScript? - PullRequest
0 голосов
/ 03 апреля 2019

Я пишу страницу один раз, сохраняя на локальном компьютере, она может работать cmd сделать tracert , ping и другие вещи для диагностики сети только страницыработает для большинства страниц, но я не могу понять, как закрыть окно cmd после сохранения результатов в файл?

И это работает только в IE.

Запускает tracert > сохраняет в файл> файл извлекается в текстовое поле> отправляется по электронной почте

Я хочу, чтобы система вывела это во всплывающем окне.
Я пробовал:

WshShell.close()
WshShell.Quit
WScript.close
WScript.Quit

<script type="text/javascript" language="javascript">
    function RunFile3() {
    var domain = document.getElementById("domain").value;
    WshShell = new ActiveXObject("WScript.Shell");
    WshShell.Run("c:/windows/system32/cmd.exe /k tracert " + domain + " > C:/xampp/htdocs/tracert/trace.txt", 1, false);
}
</script>
</head>
<body>
<input type="text" id="domain">
!---<input type="button" value="Run Ping" onclick="RunFile2();"/>--->
<input type="button" value="Run Tracert" onclick="RunFile3();"/>
<br>
<textarea rows="30" cols="60" id="results">
</textarea>

1 Ответ

1 голос
/ 03 апреля 2019

Вы можете отследить командное окно по WMI, а затем завершить процесс. Вот так:

function closeCMD () {
    var wmiLocator = new ActiveXObject('WbemScripting.SWbemLocator'),
        wmiService = wmiLocator.ConnectServer('.', 'root\\CIMV2'),
        cmdWindows = new Enumerator(wmiService.ExecQuery("Select * from Win32_Process Where name = 'cmd.exe'"));
    while (!cmdWindows.atEnd()) {
        if (cmdWindows.item().CommandLine.indexOf('trace.txt') > -1) { // *
            cmdWindows.item().Terminate(0);
        }
        cmdWindows.moveNext();
    }
    return;
}

* = trace.txt, или любое другое содержимое исходного вызова командной строки (часть параметра строки, которая передается cmd.exe в первом аргументе, переданном Run), который уникальным образом определяет конкретное окно cmd, которое вы хотите закрыть.

Если вы хотите закрыть все окна cmd, вы можете удалить условие из цикла и просто набрать cmdWindows.item().Terminate(0);.

Внимание!
Перед вызовом функции необходимо установить синхронный вызов cmd, чтобы вы не закрывали окно, пока оно не выполнит свою работу. Этого можно достичь, изменив третий аргумент Run на true (то есть аргумент, который вы в настоящее время передаете как false).


Вы также можете легко изменить функцию на более общую, просто передавая имя процесса и идентификатор в качестве аргументов, и сформировав строку запроса WMI с аргументом процесса и передав аргумент indentifier в indexOf.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...