Служба Windows С# для запуска taskkill.exe

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

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

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

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

Какие-либо предложения?


person zaitsman    schedule 02.07.2013    source источник
comment
Вы можете отладить, чтобы увидеть, что вы получаете? это выдает какую-то ошибку/исключение?   -  person microtechie    schedule 02.07.2013
comment
Не могу сказать, работает как локальная система. Я попытался передать вывод следующим образом: taskkill /IM notepad.exe › C:\Users\user\Desktop\testoutput.txt — файл создан, но он пуст. Если я запускаю команду, дважды щелкнув пакетный файл, будет получен следующий вывод: УСПЕХ: Отправлен сигнал завершения процессу notepad.exe с PID XXXX. - для каждого из запущенных блокнотов.   -  person zaitsman    schedule 02.07.2013
comment
Я не думаю, что сбой в пакетном сценарии вызовет исключение.   -  person Pranav Negandhi    schedule 02.07.2013
comment
вы можете убедиться, что вы работаете от имени администратора?   -  person microtechie    schedule 02.07.2013
comment
@Microtechie, конечно, пробовал - пробовал как запуски ProcessStartInfo.Verb, так и добавление манифеста в службу, требующую администратора. Решение в моем ответе - видимо, нужно /F на тасккилле. Сначала я не мог найти много по теме, поэтому я решил не удалять вопрос в конце концов.   -  person zaitsman    schedule 02.07.2013
comment
Конечно, имеет смысл, так как это приведет к принудительному удалению файлов.   -  person microtechie    schedule 02.07.2013


Ответы (2)


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

person miles    schedule 02.07.2013
comment
да, понял это несколько минут назад - пришлось /F, чтобы заставить его работать - person zaitsman; 02.07.2013

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

person zaitsman    schedule 02.07.2013