droid15 Ответов: 2

Почему process.start переходит в фоновый режим при запуске из службы в C#


У меня есть служба C# с framework 4, она запускает внешнее приложение с помощью process.start, но она запускается в фоновом режиме, я устанавливаю службу с помощью
InstallUtil.exe -u Service.exe
из командной строки, работающей от имени администратора
вот этот код:
Process.Start("path\to\application.exe");

Эти вопросы беспокоят меня больше всего:
Запускается ли приложение в фоновом режиме, потому что я использую командную строку с правами администратора?
Или из-за объем услуг (локальный компьютер)?
Или даже потому, что фреймворк я использую?
Я хочу, чтобы приложение было видно, что я могу сделать?, что я делаю не так?

Что я уже пробовал:

Я попробовал этот код, чтобы сделать приложение видимым, но он не работает (он запускается в фоновом режиме):
var processPath = ConfigurationManager.AppSettings["path"];
var process = new Process();
process.StartInfo = new ProcessStartInfo(processPath);
process.StartInfo.Verb = "Open";
process.StartInfo.WindowStyle = ProcessWindowStyle.Normal;
process.StartInfo.WorkingDirectory = Path.GetDirectoryName(processPath);
process.Start();

Я даже попробовал опцию "Разрешить сервису взаимодействовать с рабочим столом"

2 Ответов

Рейтинг:
2

Dave Kreskowiak

Ни один из вышеперечисленных.

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

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

По соображениям безопасности вы вообще не можете видеть рабочий стол служб. Таким образом, любой пользовательский интерфейс, который создает глупо написанная служба, или любой пользовательский интерфейс, который создает приложение, запущенное службой, никогда не будет виден пользователем, вошедшим в консоль.


Рейтинг:
0

OriginalGriff

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

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