Запуск процесса программно в C # из службы Windows, пользовательский интерфейс не отображается, я вижу процесс в диспетчере задач - PullRequest
1 голос
/ 28 января 2010

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

Есть идеи, что происходит? Я запускаю это на Windows XP

clientProcess = new System.Diagnostics.Process();
clientProcess.StartInfo.FileName = system_drive_path + @"\sd\ud\ud.exe";
clientProcess.StartInfo.WindowStyle = ProcessWindowStyle.Maximized;
clientProcess.Start();

Ответы [ 2 ]

3 голосов
/ 28 января 2010

Вы не должны взаимодействовать с пользователем из службы, включая запуск процесса. На самом деле это активно запрещено в Vista и более поздних версиях, , включая службы, помеченные как «интерактивные» , по разным причинам, в первую очередь для обеспечения безопасности:

Важно Услуги не могут напрямую взаимодействовать с пользователем с Windows Vista.

Если вы хотите взаимодействовать с сеансом пользователя, то в сеансе пользователя должен быть процесс (например, приложение иконки в трее), который взаимодействует со службой через протокол IPC (сетевые каналы, разделяемая память, сообщения и т. Д.).

Создайте отдельное приложение пользовательского интерфейса, которое запускается при запуске сеанса, и это приложение может запустить ваш sd.exe по запросу службы.

3 голосов
/ 28 января 2010

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

Вам необходимо настроить службу для взаимодействия с рабочим столом, тогда она будет работать. Вы можете сделать это либо схематически в классе установщика сервиса

Или вручную в окнах свойств службы на вкладке Вход .

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