|
Не могу убить прогу, если получилось так, что она запущена с правами админа (тот же юзер)
|
|||
---|---|---|---|
#18+
Грубо так. Есть MyProga.exe Она запускает скрытую форму с шапкой "MyProgaTitle", пока форма висит, прога работает, делает дела (мне так удобно). Чтобы MyProga.exe корректно вышла, надо просто закрыть форму (послать WM_CLOSE окну "MyProgaTitle"). Итого, код "СТАРТ". Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13.
код "СТОП". Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28.
Все чудненько работает, но возникло одно НО. Прога MyProga.exe для работы сама по себе не требует администратора. Но может случиться ситуация, что процесс ее запустивший уже был запущен "As admin", и <СТАРТ> сработал с правами админа. В этом случае <СТОП> без админских прав не сработает. EndTask не закроет окно и моя KillProga тупо зависнет на цикле. Как извратиться, чтоб <СТОП> таки убивал запущенную как "Admin" MyProga.exe. (!!!юзер тот же) Полностью исключить ситуацию запуска под админом я не могу. Например, может быть запущена из-под инсталлятора. Например, юзер теоретически может запустить управляющее приложение под админом, нажать в нем кнопку <СТАРТ>, которая запустит MyProga.exe. Потом закрыть это управляющее приложение, перезапустить его под НЕ админом, нажать <СТОП> и уже не сработает. Я пока не копал и тест приложение не делал, код как бы старый, "проверенный", но однако напоролся. Убивающий (неадминский) процесс очевидно окно видит (иначе б вышел из цикла, не закрыв окно), но при этом WM_CLOSE видимо не срабатывает. Можно конечно изменить подход. У меня на MyProga.exe к примеру повешен mailslot (для других целей), команда туда пройдет отовсюду, ну а прога сама себя по этой команде закроет, но не хотелось бы так поступать. Хотя бы потому, что mailslot не создается если в силу какой-то ошибки вдруг запустился другой экземпляр (логически да и кодом исключено, но все же; KillProga, она как раз убивает в этом случае все окна). М.б. еще Process.Start как-то можно по хитрому сделать, чтоб даже если под админом, не админ смог бы убить вторым кодом? ... |
|||
:
Нравится:
Не нравится:
|
|||
06.11.2017, 23:19 |
|
Не могу убить прогу, если получилось так, что она запущена с правами админа (тот же юзер)
|
|||
---|---|---|---|
#18+
Ну в общем, не ловит окно запущенное под админом месседжы от "юзера". В данном конкретном случае воспользовался имеющимся в MyProga.exe mailslot. Т.е. заменил этот kill на mailslot-команду. MyProga.exe команду эту ловит (неважно как и вообще под чем запущена) и делает сама себе Me.Close. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.11.2017, 01:43 |
|
Не могу убить прогу, если получилось так, что она запущена с правами админа (тот же юзер)
|
|||
---|---|---|---|
#18+
Дмитрий77 Как извратиться, чтоб <СТОП> таки убивал запущенную как "Admin" MyProga.exe. (!!!юзер тот же) А чё нельзя месседж послать по именованному каналу, чтобы процесс сам убился? По-моему это в любом случае лучше, чем стопать снаружи. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.11.2017, 04:36 |
|
Не могу убить прогу, если получилось так, что она запущена с правами админа (тот же юзер)
|
|||
---|---|---|---|
#18+
Дмитрий77Т.е. заменил этот kill на mailslot-команду. MyProga.exe команду эту ловит (неважно как и вообще под чем запущена) и делает сама себе Me.Close. А ну так да ) ... |
|||
:
Нравится:
Не нравится:
|
|||
07.11.2017, 04:37 |
|
Не могу убить прогу, если получилось так, что она запущена с правами админа (тот же юзер)
|
|||
---|---|---|---|
#18+
Дмитрий77Ну в общем, не ловит окно запущенное под админом месседжы от "юзера". "дырку" сделай ChangeWindowMessageFilter или ChangeWindowMessageFilterEx ... |
|||
:
Нравится:
Не нравится:
|
|||
07.11.2017, 07:34 |
|
Не могу убить прогу, если получилось так, что она запущена с правами админа (тот же юзер)
|
|||
---|---|---|---|
#18+
kealon(Ruslan)Дмитрий77Ну в общем, не ловит окно запущенное под админом месседжы от "юзера". "дырку" сделай ChangeWindowMessageFilter или ChangeWindowMessageFilterEx Спасибо, похоже ответ на мой вопрос, именно как я его задал. Попробовал Т.е. если я в MyProga.exe делаю такой код: Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13.
Запускаю MyProga.exe "As Admin" И делаю свою KillProga из-под НЕ-админ. Работает, закрывается-убивается. Единственное, Minimum supported clientWindows Vista [desktop apps only] (я пока не брезгую обеспечивать обратную совместимость с XP) Я так понимаю на XP/2003 этой ситуации в принципе не будет? С админ-НЕадмин для того же юзера? (там же UAC нету, просто не вызываю ChangeWindowMessageFilter и все) Пока уже сделал через mailslot, кучу времени потратил на переделку <СТОП>-ов (рутина и вызовы из разных мест), но думаю верну назад с учетом сказанного. Все-таки эта KillProga проверена годами (какая бы дурная она не была, к циклу можно естественно придраться). ... |
|||
:
Нравится:
Не нравится:
|
|||
07.11.2017, 10:45 |
|
|
start [/forum/topic.php?fid=20&fpage=37&tid=1399632]: |
0ms |
get settings: |
10ms |
get forum list: |
12ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
38ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
41ms |
get tp. blocked users: |
2ms |
others: | 339ms |
total: | 465ms |
0 / 0 |