none
Служба отказывается запускать внешнюю программу. RRS feed

  • Вопрос

  • Нужно из службы запустить внешнюю программу. Пробовал и Shell() и Process.Start(), но ни тот ни другой код не срабатывает в службе. Подцеплялся к ней отладчиком, выполняется нормально (ошибок не выкидывает), но программы не запускаются. Может, кто-то знает что можно с этим поделать?

       *   *   *

    Если в свойствах моей службы указать вход в систему "С системной учетной записью" и поставить галочку "Разрешить взаимодействие с рабочим столом". То система выдаст сообщение "Обнаружение интерактивных служб - программа запущенная на этом компьютере пытается отобразить сообщение." Если нажать, отобразить сообщение, то откроется еще один рабочий стол и там будут видны мной запущенные приложения.

    Как их запускать на моем рабочем столе?

    • Изменено DrKillJoy1 22 марта 2013 г. 3:51
    22 марта 2013 г. 2:37

Ответы

Все ответы

  • Привет

    Это сделать не так просто из-за изолированности служб от текущего контекста, но возможно, используя Windows API. Вот обширная статья описывающая решение вашей проблемы в блоге MSDN - Launching an interactive process from Windows Service in Windows Vista and later 

    Скорее всего вам придется запускать процесс с помощью  CreateProcessAsUser


    Для связи [mail]

    • Помечено в качестве ответа DrKillJoy1 26 марта 2013 г. 3:01
    25 марта 2013 г. 9:33
  • Большое спасибо! Этот метод действительно работает.

    Есть несколько минусов:

    • Не запускаются консольные приложения (приложения без интерфейса).
    • Нельзя запускать приложения с "ключами" (пример "rar.exe x -o+")

    Но за неимением лучшего варианта, приходиться использовать этот. А для того, чтобы запустить приложение с ключом, приходится программно создавать bat-файл и в него уже писать путь к приложению и ключи. Жуткий "велосипед" но работает!)

    26 марта 2013 г. 3:06