System.Diagnostics.Process.Start () не может запустить процесс при вызове из службы Windows - PullRequest
4 голосов
/ 19 января 2009

Я пытаюсь запустить внешний процесс из службы .NET Windows. В прошлом я использовал перегрузку Process.Start(), которая принимает путь к исполняемому файлу и строку командной строки. Это работает. Но сейчас я хотел бы запустить процесс и запустить его в контексте конкретного пользователя. Поэтому я называю эту версию Start()

public static Process Start(
    string fileName,
    string userName,
    SecureString password,
    string domain)

Однако, когда я вызываю метод, приложение, которое я пытаюсь запустить, генерирует необработанное исключение:

The application failed to initialize properly (0xc0000142). Click on OK to terminate the application.

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

Так есть ли способ заставить это работать в службе Windows?

Ответы [ 4 ]

2 голосов
/ 03 апреля 2009

Это очень похоже на этот вопрос здесь . Ответ обычно связан с проблемами безопасности рабочего стола и оконной станции, на которой выполняется процесс. См. эту статью для объяснения и некоторого примера кода.

2 голосов
/ 19 января 2009

Возможно, пользователь должен иметь защищенное право «вход в систему как услуга». Это делается с помощью приложения «локальная политика безопасности». И / или «вход в систему как пакетное задание».

1 голос
/ 19 января 2009

Это просто выстрел в темноте, но, возможно, вы можете попытаться запустить службу Windows в интерактивном режиме. Однако если это работает, этого нельзя сделать в Windows Vista (из-за изоляции сеанса 0).

0 голосов
/ 19 января 2009

Используйте Filemon и посмотрите, пытается ли он открыть файл конфигурации и не находит его. Однажды у меня была эта ошибка из-за неправильной конфигурации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...