Альтернатива, чтобы “Позволить сервису взаимодействовать с рабочим столом”?

Мне установили сервис окон (C#) на сервере, который запускает каждые 10 минут исполняемый файл (C#) для обработки некоторых изображений от одного каталога до другого. Никакое взаимодействие не требуется ни с каким пользователем. Тем не менее, начиная с исполняемого файла как окно вывода, для создания сервиса выполненным я должен включить флажок "Allow service to interact with desktop", который рассматривают как небезопасную и плохую практику. Как я пошел бы об этой проблеме? Мне нравится разделять исполняемый файл от моего сервиса окон потому что

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

Править:

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

Faulting application myapp.exe, version 1.0.0.0, time stamp 0x4b8304c3, 
faulting module KERNEL32.dll, version 6.0.6002.18005, time stamp 0x49e03821, 
exception code 0xc0000142, fault offset 0x00009eed, process id 0x10ec, 
application start time 0x01cab736950a64b5.

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

Какие-либо мысли?

Большое спасибо в течение Вашего времени.

19
задан jdecuyper 27 February 2010 в 18:39
поделиться

3 ответа

Если вы используете Vista и более поздние версии, и вам действительно не нужно никакого взаимодействия с пользователем, но есть интерактивный исполняемый файл для выполнения, функция изоляции сеанса 0 должна помочь снять некоторые опасения по поводу «плохой практики» взаимодействия службы с рабочим столом (который в сеансе 0 не имеет физической консоли).

Эта изоляция сеанса 0 не позволит непривилегированным пользователям выполнять Shatter Attacks на вашу службу, поскольку они получают свои интерактивные рабочие столы в разных сеансах. Shatter-атаки - основная причина, по которой такое «взаимодействие с рабочим столом» считалось плохой практикой, и если вы используете Vista или более позднюю версию, все должно быть в порядке, если вы не можете этого избежать (или вам придется потратить слишком много усилий для этого).

Итак, если все работает нормально, то, вероятно, у вас все в порядке.

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

11
ответ дан 30 November 2019 в 04:48
поделиться

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

2
ответ дан 30 November 2019 в 04:48
поделиться

Является ли подпроцесс просто консольным приложением? Я не писал Windows Services, но думаю, что простого запуска подпроцесса без окна будет достаточно. Используйте перегрузку Process.Start, которая принимает ProcessStartInfo, и установите ProcessStartInfo.CreateNoWindow в true.

http://msdn.microsoft.com/en-us/library/system.diagnostics.processstartinfo.createnowindow.aspx

2
ответ дан 30 November 2019 в 04:48
поделиться
Другие вопросы по тегам:

Похожие вопросы: