2013-07-02 5 views
0

У меня есть служба C#, которая использует FileSystemWatcher и вызывает связанные команды (например, пакетные файлы). Один из пакетных файлов должен убить запущенную программу, скопировать некоторые файлы и снова запустить программу. Taskkill используется, чтобы избавиться от программы.Службы Windows C# для запуска taskkill.exe

Вызывается пакетный файл, но команда taskkill никогда не убивает процесс (например, notepad.exe, который пользователь открыл). Один и тот же командный файл работает, если я просто запустил его, когда я зарегистрировался как этот пользователь.

Я попробовал запустить службу как зарегистрированную учетную запись пользователя (тот же, у которой открыт блокнот), но безрезультатно - по умолчанию используется локальная система.

Я не могу жестко указать имя пользователя (я думаю, однако, о конфигурации для олицетворения, но немного неохотно хранить пароли пользователей).

Любые предложения?

+0

можете ли вы отлаживать, чтобы узнать, что вы получаете? это бросает какую-то ошибку/исключение? – Microtechie

+0

Не могу сказать, работает как локальная система. Я попытался выполнить вывод строки следующим образом: taskkill/IM notepad.exe> ​​C: \ Users \ user \ Desktop \ testoutput.txt - файл создан, но он пуст. Если я запустил команду, дважды щелкнув командный файл, выдается следующий вывод: УСПЕХ: Отправил сигнал завершения процесса «notepad.exe» с PID XXXX. - для каждой из исполняемых блокнотов. – zaitsman

+0

Я не думаю, что сбой в пакетном скрипте вызовет исключение. –

ответ

0

Работает как локальная служба, всегда имеет самые высокие привилегии, попробуйте taskkill/f, чтобы остановить ее. однако, если все еще сбой, проверьте код ошибки на% errorlevel%

+0

Да, понял, что несколько минут назад - пришлось/F заставить его работать – zaitsman

0

Возможно, это стоит удалить, возможно, нет. Локальная система смогла убить процесс с помощью переключателя/F (force) на taskkill.exe

Смежные вопросы