Войти

Показать полную графическую версию : [решено] Завершение процесса в Диспетчере задач с символом ℗ в конце имени


BKPB
14-02-2018, 16:35
Есть программы типа Portable, то есть распаковываются в папку TEMP \RarSFX и оттуда работают,
но иногда после закрытия программы они продолжают висеть в Диспетчере задач,
а иногда если одну и туже программу запустить несколько раз, например 2 раза и закрыть оба раза,
то в Диспетчере задач остаются висеть уже 2 процесса с одинаковым именем и не завершаются пока
не закроешь их вручную. Всё бы это ничего, но когда пытаюсь удалить файл с которым работала эта программа
его невозможно удалить пока не завершишь процесс с именем этой программы.
Перезагрузка Explorer.exe не помогает.
Все программы имеют в конце имени символ ℗, это так я обозначаю портативные программы.
Что нужно.
Возможно ли создать скрипт, который бы завершал все процессы в Диспетчере задач имеющие в конце имени этот символ ℗.

DJ Mogarych
14-02-2018, 16:46
Очень не советую связываться со спецсимволами в подобных случаях, добавили бы лучше слово portable в конце.

Попробуйте вот это (Powershell от админа):
stop-process *℗ -force

BKPB
14-02-2018, 16:51
Нет мне нужен именно скрипт, я хочу закрепить ссылку на него в контекстном меню и запускать при необходимости.

DJ Mogarych
14-02-2018, 16:53
Ну сохраните его как скрипт, кто мешает? Расширение .ps1.

BKPB
14-02-2018, 16:56
А не поможете сделать на подобии такого скрипта:
Dim WSHShell
Set WSHShell = WScript.CreateObject("WScript.Shell")
' Если скрипт запущен с каким-то параметром, то...
If WScript.Arguments.Count>0 Then
' Проверяем значение в реестре и в зависимости от него либо отображаем расширения, либо наоборот скрываем.
If WSHShell.RegRead("HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced\HideFileExt") = 0 then
' Скрываем расширения
WSHShell.RegWrite "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced\HideFileExt", "1", "REG_DWORD"
' Добавляем пункт в контекстное меню
' В поле command прописываем путь до текущего скрипта с параметром (не важно каким, главное, чтобы он был), чтобы..
' ..скрипт понял, что ему нужно не удалить ветку реестра, а изменить
WSHShell.RegWrite "HKEY_CURRENT_USER\Software\Classes\Directory\Background\shell\HideFileExt\", "Показать расширения", "REG_SZ"
WSHShell.RegWrite "HKEY_CURRENT_USER\Software\Classes\Directory\Background\shell\HideFileExt\command\", "WScript.exe """&WScript.ScriptFullName&""" -argument", "REG_SZ"
' Обновляем окно эксплорера, чтобы увидеть результат
WSHShell.SendKeys "{F5}"
Else
' Показываем расширения
WSHShell.RegWrite "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced\HideFileExt", "0", "REG_DWORD"
' Добавляем пункт в контекстное меню
WSHShell.RegWrite "HKEY_CURRENT_USER\Software\Classes\Directory\Background\shell\HideFileExt\", "Скрыть расширения", "REG_SZ"
WSHShell.RegWrite "HKEY_CURRENT_USER\Software\Classes\Directory\Background\shell\HideFileExt\command\", "WScript.exe """&WScript.ScriptFullName&""" -argument", "REG_SZ"
' Обновляем окно эксплорера, чтобы увидеть результат
WSHShell.SendKeys "{F5}"
End If
Else
' Если запись в реестре есть, то удаляем наш раздел
If WSHShell.Run("cmd.exe /C REG QUERY ""HKEY_CURRENT_USER\Software\Classes\Directory\Background\shell\HideFileExt""", 0, True)=0 Then
WSHShell.Run "cmd /C REG DELETE ""HKEY_CURRENT_USER\Software\Classes\Directory\Background\shell\HideFileExt"" /f", 0
Else
' Иначе запускаем этот скрипт с параметром (какой параметр - значения не имеет, главное его наличие)
WSHShell.Run """"&WScript.ScriptFullName&""" -argument"
' И ещё добавим иконочку для красоты
WSHShell.RegWrite "HKEY_CURRENT_USER\Software\Classes\Directory\Background\shell\HideFileExt\Icon", "%SystemRoot%\System32\shell32.dll,69", "REG_SZ"
End If
End if
Set WSHShell = Nothing
WScript.Quit(0)

BKPB
14-02-2018, 17:42
Что то не срабатывает:
Так тоже: stop-process *℗.exe -force
Так как процесс называется Axialis Icon 6.9.1.0 ℗.exe
stop-process : He удается привязать параметр "InputObject'.
He удается преобразовать значение "*0" типа "System.string" в тип "System.Diagnostics.Process".
строка:1 знак:14
+ stop-process *0 -force
+
+ Categorylnto : InvalidArgument: ( : ) [.Stop-Process], ParameterBindingException
+ FullyQualifiedErrorId : CannotConvertArgumentNoMessage,Microsoft.PowerShell.Commands.StopProcessCommand

DJ Mogarych
14-02-2018, 20:00
Хорошо, а если так?
stop-process *$([char]0x2117) -force

Казбек
14-02-2018, 20:13
Можно так в командной строке:
wmic Path win32_process Where "name like '%%℗%%'" CALL Terminate
Но из скрипта это не сработает для ℗. Короче, хотите скрипт - не используйте этот символ, тем более, что вы еще и используете его неправильно: ℗ - Sound recording copyright symbol.

x0r
14-02-2018, 20:23
Очень не советую связываться со спецсимволами в подобных случаях, добавили бы лучше слово portable в конце. »
+1

BKPB
14-02-2018, 20:30
Казбек, Сработало хорошо.
А можно это выполнить с помощью батника?
И если можно, как дописать в него ещё и перезапуск dllhost.exe

x0r, Слишком длинные получаются имена и половина имени не видно.
Я люблю когда имя отображается полностью на рабочем столе и в папках.

Казбек
14-02-2018, 20:43
А можно это выполнить с помощью батника? »

Нельзя (мне неизвестно как). Вам два человека уже сказали, что вам стоит заменить этот символ на что-то более стандартное, потому что использование его в скриптах - очень плохая идея. Вы продолжаете гнуть свою линию. Good luck!!

Я люблю когда имя отображается полностью на рабочем столе и в папках. »
Замените этот символ на знак + и завершайте свои процессы одной строкой из обычного batch файла. Длина имен никак не увеличится.
wmic Path win32_process Where "name like '%%+%%'" CALL Terminate




© OSzone.net 2001-2012