Закройте приложение, используя VBScript

Я пытался открыть и закрыть приложение. Я пытался так:

Dim App1 
Set App1 = CreateObject("WScript.Shell")
App1.Run("firefox")
App1.Quit

Firefox откроется, но не закроется.

Сообщение об ошибке:

объект не поддерживает это свойство или метод

Я упомянул InDesign Scripting, как выйти из приложения (не документа)

Подскажите пожалуйста процедуру закрытия приложения.

5 ответов

Если вы хотите иметь возможность завершить процесс таким образом, вам нужно использовать Exec метод вместо Run метод.

Set ff = CreateObject("WScript.Shell").Exec("firefox")
'you do stuff
ff.Terminate

Я заметил несколько способов:

  1. taskkill - Сработало только если я попытаюсь убить тот же процесс, что и при запуске.

    Dim oShell : Set oShell = CreateObject("WScript.Shell")
    oShell.Run """C:\My_Scripts\ddl.exe"" -p1 -c"
    
    'some code
    
    oShell.Run "taskkill /f /im ddl.exe", , True
    
  2. SendKeys - Работает для всех приложений, если имя окна известно.

    Dim oShell : Set oShell = CreateObject("WScript.Shell")
    filename = "C:\Some_file.txt - Notepad"
    act = oShell.AppActivate(fileName)
    oShell.SendKeys "% C"
    
  3. Объект WMI - 2 способа работают хорошо для меня, поэтому я не пробовал. Вы можете найти пример здесь:

    Set objWMIService = GetObject("winmgmts:" _
        & "{impersonationLevel=impersonate}!\\.\root\cimv2")
    
    Set colProcessList = objWMIService.ExecQuery _
        ("Select * from Win32_Process Where Name = 'Chrome.exe'")
    
    Set oShell = CreateObject("WScript.Shell")
    For Each objProcess in colProcessList
        oShell.Run "taskkill /im chrome.exe", , True
    Next
    

Вот альтернативная реализация VBScript:

strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
    & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")

Set colProcessList = objWMIService.ExecQuery _
    ("Select * from Win32_Process Where Name = 'Notepad.exe'")

For Each objProcess in colProcessList
    objProcess.Terminate()
Next

Firefox не является COM-объектом. COM-объект Firefox отсутствует. Firefox не хочет, чтобы вы использовали COM. Или НЕТ. Или Microsoft. Вот почему вы не можете создать объект Firefox, поэтому вместо этого вы создали объект WScript.Shell.

В WScript.Shell нет метода выхода. Если это так, это не поможет убить Firefox.

Это пример использования WMI из VBS для запуска, а затем завершения такого процесса, как Firefox.

Хорошая работа для этого примера:

Dim oShell : Set oShell = CreateObject("WScript.Shell")
oShell.Run """C:\My_Scripts\ddl.exe"" -p1 -c"

'some code

oShell.Run "taskkill /f /im ddl.exe", , True
Другие вопросы по тегам