Показать полную графическую версию : [решено] Закрытие апплета из bat файла.
Kardinalli
23-05-2009, 12:34
Как убить процесс понятно. А вот как убить апплет? При этом не убить rundll32, на котором еще может что-то висеть? Например, как принудительно закрыть окно апплета "Установка и удаление программ" appwiz.cpl ?.
Kardinalli, как вы уже выяснили, аплет не имеет собственного процесса, поэтому невозможно его убить, не затронув другие процессы. Возможно, нужно смотреть в сторону WSH, либо AutoIt в соседнем форуме - это будет проще, наверное.
Kardinalli
23-05-2009, 22:22
Vadikan
По сути, мы имеем несколько копий rundll32.exe, нужно выяснить какая копия принадлежит апплету и убить именно процесс. Вот как это выяснить... :unsure:
Можно без проблем закрыть окно из vbs, но очень не хотелось бы плодить несколько разных файлов для одной, по сути, работы...
Petya V4sechkin
24-05-2009, 10:34
Kardinalli, или с помощью NirCmd (http://www.nirsoft.net/utils/nircmd.html):
nircmd.exe win close title "Установка и удаление программ"
…или посредством Wmic.exe:
@echo y|Wmic.exe Process WHERE (Name='Rundll32.exe' AND CommandLine LIKE '%Rundll32.exe%shell32.dll,Control_RunDLL%appwiz.cpl%Установка и удаление программ%') CALL Terminate>nul
Командная строка, которую использует «explorer.exe» для запуска апплета «Установка и удаление программ», может выглядеть при этом, например, так:
"C:\WINDOWS\system32\rundll32.exe" C:\WINDOWS\system32\shell32.dll,Control_RunDLL "C:\WINDOWS\system32\appwiz.cpl",Установка и удаление программ
Kardinalli
24-05-2009, 12:59
Kardinalli, или с помощью NirCmd: »
Спасибо, мне этот вариант уже предлагали, но не хочется ради одной задачи по деинсталляции задействовать несколько разношерстных файлов.
Iska, спасибо за ответ! Код на открытие работает без проблем, а вот закрыть окно не получается. В коде нет ошибок? И, кстати, откуда этот вариант, никогда не встречал ничего подобного!
Petya V4sechkin
24-05-2009, 13:11
Kardinalli, или так:
TaskKill /FI "MODULES eq appwiz.cpl"
Kardinalli
24-05-2009, 13:14
Petya V4sechkin, потрясающе!!! Огроменное спасибо, блин, век живи, век учись. А таких профи как в этой ветке, вообще, слов нет... :up Спасибо друзья!
А про wmic никогда не интересовался - а зря, посмотрел, зело прелюбопытная вещь!
Petya V4sechkin, а откуда такой вариант интересный?
Petya V4sechkin
24-05-2009, 13:30
Kardinalli, я просто посмотрел опции TaskKill.
Только надо иметь в виду, что в XP Home Edition команда TaskKill отсутствует.
WMIC у вас не получилось, потому что в батнике символы % надо дублировать (для экранирования):
WMIC Process Where "Name = 'rundll32.exe' And CommandLine Like '%%appwiz.cpl%%'" Call Terminate
Kardinalli
24-05-2009, 13:37
я просто посмотрел опции TaskKill »
Да я вроде тоже все глаза проглядел, но толку то... :sorry:
И за правильный вариант с использованием wmic спасибо! Наверное его и использую, раз в home edition могут быть проблемы с taskkill. Wmic же есть начиная от WinXP и выше?
Petya V4sechkin
24-05-2009, 13:41
Wmic же есть начиная от WinXP и выше?
Да (если в кривой "сборке" не вырезали или службу WMI не отключили для "оптимизации").
Kardinalli
24-05-2009, 13:52
Petya V4sechkin, ну, будем рассчитывать на среднестатистического юзера, а не "рукотворцев". Еще раз спасибо все за ветку, много чего любопытного узнал. Хотя еще в 90-х неплохо и немало писал на ассемблере, а ведь поди ж ты, как окна быстро от фундаментальных вещей отучают, жесть... :blush:
Petya V4sechkin, спасибо, не знал этого про taskkill :)
Kardinalli
24-05-2009, 17:18
интересно, почему при использовании пары команд:
cmd /c taskkill /f /im explorer.exe && start explorer.exe
просто перезапускается оболочка, а при использовании
WMIC Process Where "Name = 'explorer.exe'" Call Terminate && start explorer.exe
при запуске эксплорера открывается папка "Мои документы"?
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.