Zalak Parikh Ответов: 4

Запустите любой исполняемый файл из службы windows


Я создал службу windows с Process.start(filepath) в ней. Но он не работает и не показывает никаких ошибок.

Я попробовал BackgroundWorker с делегатом DoWorkEventHandler, чтобы начать этот процесс. Но мне не удалось запустить этот процесс.

Я также пробовал использовать ProcessStartInfo и UseShellExecute как false, но это не работает.

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

Process prs = new Process();
string strAppPath;
strAppPath = @"C:\CMT\Debug\testing.exe";
prs = Process.Start(strAppPath);
prs.WaitForExit();
base.Stop();

Maciej Los

"это не работает- это совсем не информативно. Можете ли вы быть более конкретным и предоставить более подробную информацию?

Dave Kreskowiak

Все очень просто. Не делай этого.

Это считается угрозой безопасности. Любое "решение" (читай: обходной путь), которое вы реализуете для этого, рискует не сработать в будущем выпуске Windows. Безопасность вокруг этого была ужесточена, и ужесточена, и еще раз ужесточена.

Кстати, Ваш код не провалился. Он запустил процесс на рабочем столе службы, а не на рабочем столе пользователя. Приложение работает, вы просто не можете видеть его или взаимодействовать с ним.

4 Ответов

Рейтинг:
9

thegreatsm

Я нашел решение.

используйте ссылку ниже

https://social.msdn.microsoft.com/Forums/vstudio/en-US/990e7c4a-afa7-47aa-b9a6-d5b6beb19f41/call-a-program-via-windows-service?форум=csharpgeneral


Dave Kreskowiak

Сколько времени пройдет, прежде чем Мисс захлопнет дверь и на этот "обходной путь" тоже?

Запуск пользовательских процессов из сеанса, не являющегося пользовательским, представляет собой угрозу безопасности. Так было всегда, и так будет всегда.

Рейтинг:
2

Maciej Los

Пожалуйста, прочтите это: .net - как я могу запустить EXE-программу из службы Windows с помощью C#? - переполнение стека[^]

Самая важная информация-это:

Цитата:
Службы Windows не могут запускать дополнительные приложения, поскольку они не выполняются в контексте какого-либо конкретного пользователя. В отличие от обычных приложений Windows, службы теперь работают в изолированном сеансе и им запрещено взаимодействовать с пользователем или рабочим столом.


Перейдите по ссылке, чтобы найти 2 обходных пути:
1) Создайте стандартное приложение Windows вместо службы,
или
2) Создайте консольное приложение, которое не позволит Windows блокировать создание процесса, поскольку оно больше не будет запрашивать создание консольного окна


Рейтинг:
17

RickZeeland

С более новыми версиями Windows вы не можете запускать приложения Windows Forms из службы, Microsoft заблокировала это уже давно.
Возможно, вас заинтересует Запустите любое приложение WinForms в качестве службы Windows[^]


Zalak Parikh

Я только хочу запустить любой из исполняемых файлов системных программ, например notepad.exe, cmd.exe, creo.exe и т. д., а не приложения windows forms.

RickZeeland

Извините notepad.exe это также приложение Windows forms !

Zalak Parikh

Может быть, вы и правы. но я нашел notepad.exe в фоновом режиме процесса.

F-ES Sitecore

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

RickZeeland

Действительно, это более правильное объяснение :)

Рейтинг:
1

OriginalGriff

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

В принципе, если ваше приложение имеет пользовательский интерфейс, будь то графический интерфейс или консоль, служба вообще не может его запустить.


Maciej Los

5ed!