2014-01-28 4 views
0

Я создал службу Windows, в которой я хочу запустить приложение Windows Form. В этом приложении я установил стиль рамки формы на FixedToolWindow, а также при его минимизации он не отображается на панели задач (я установил ShowInTaskbar в false). Поэтому я не понимаю, как запустить это приложение. Когда я использовал простое приложение для формы Windows, оно запускается, и процесс отображается в TaskManager, но графический интерфейс не отображается.Запустить приложение Windows Form из службы Windows

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

p.StartInfo.FileName = @"Exe path"; 
p.StartInfo.WindowStyle = ProcessWindowStyle.Maximized; 
p.StartInfo.CreateNoWindow = true; 
p.Start(); 

Где р объект System.Diagnostics.Process класса.

+3

обречен на провал или быть исключительно неудобным - услуги выполняются в другом сеансе из (возможно, нескольких) сеансов пользователя. Создайте приложение, которое вы разместите в папке «Автозагрузка» всех пользователей, которая будет запускаться внутри сеанса каждого пользователя. У приложения * * есть какой-либо пользовательский интерфейс, связь с сервисом и запуск других приложений, если требуется. –

+0

Я попытался установить CreateNewWindow = false также. все же фиктивное приложение не отображается. –

+0

@Damien_The_Unbeliever: не могли бы вы подробно объяснить, так как это моё время для работы с сервисом Windows. можете ли вы отправить пример кода –

ответ

1

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

  1. пользователь вручную запускает приложение, которое можно настроить службу, или

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

Во втором случае, вы можете использовать EventWaitHandle, если вам нужно всего лишь отправить простой «звонок-будильник», вызов, или использовать любой межпроцессную варианту связи, которые вы хотите для более сложного обмена данных. Последние обычно основаны на сокетах или именованных каналах либо напрямую, либо через WCF, Remoting или некоторые другие удобные технологии.

Смежные вопросы