2010-03-25 2 views
1

Я пытаюсь сделать службу, которая запускает настольное приложение, а затем следит за тем, чтобы она снова запускалась, если она закрыта. ,Службы Windows в Win7?

Хотелось бы, чтобы он в основном породил процесс, а затем забыл об этом, позволяя действовать как обычное интерактивное приложение. (По-видимому, это намного проще сделать в XP и раньше, но мне это нужно для XP, Vista и 7)

Моя проблема в том, что либо она появляется невидимой, если я использую process.start() с интерактивным рабочим столом и если я непосредственно создаю форму, она спрашивает: «Вы действительно хотите это сделать ?!» а затем весь экран пуст. ЗА ИСКЛЮЧЕНИЕМ для моей программы.

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

Я нахожу все это, что говорит «Не делайте службы с UI», но сначала это требование было дано мне. (Босс не хочет, чтобы это была запланированная задача). Также я заметил, что планировщик задач сам по себе является сервисом, и у него нет проблем с созданием пользовательских интерактивных приложений. Почему я тоже не могу это сделать?

Что я делаю неправильно?

ОБНОВЛЕНИЕ: Спасибо за всю полезную информацию. Мог убедить моего босса, что этого невозможно достичь, основываясь на изоляции сеанса 0, поэтому я отметил, что один из них является ответом, и дал преимущество всем, кто дал полезную информацию. Еще раз спасибо! :)

+0

Если это приложение необходимо запускать постоянно, почему бы не стать сервисом windows? – Oded

+0

@Oded: Можете ли вы рассказать мне, как сделать это так, как пользователь может видеть и взаимодействовать с ним?Я хотел бы, чтобы это решение сработало. – Brandi

+0

Непонятно, каковы фактические требования - забудьте, что говорит вам босс, что нужно делать приложению? Зачем его нужно постоянно запускать? – Oded

ответ

1

С ОС Windows Vista (и, следовательно, Windows 7) услуги не могут напрямую взаимодействовать с пользователем/рабочим столом по соображениям безопасности. Диалоги и другие формы, созданные из службы, отображаются в сеансе 0, пока ваши пользователи регистрируются в сеансе 1. Для получения дополнительной информации прочтите сеанс 0 Изоляция раздел here. Короче говоря, вызов Process.Start() из службы Windows в Windows 7 вызовет проблемы.

Вы все еще можете взаимодействовать с пользователем. Вам просто нужно сделать это косвенно, как описано here. Надеюсь, это указывает на то, что вы в правильном направлении.

+0

Благодарим вас за ссылки. К сожалению, мне нужно больше, чем просто диалоговое окно, поэтому WTSSENDMESSAGE не будет работать, и обе ваши ссылки подразумевают, что CREATEPROCESS, поскольку пользователь не будет работать в Vista или позже. Это верно? – Brandi

+0

@Brandi, как я понимаю, это не значит, что CREATEPROCESS не работает. Это то, что он запускает процесс как часть сеанса 0. Ваш пользователь не увидит приложение, потому что она вошла в сеанс 1 или выше. –

+0

@Brandi, я думаю, вам действительно нужно использовать подход CreateProcessAsUser. См. Эту ссылку для получения более подробной информации о том, как это сделать. http://social.msdn.microsoft.com/Forums/en/windowssecurity/thread/31bfa13d-982b-4b1a-bff3-2761ade5214f –

0

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

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

1

Я бы сказал, почему «Босс не хочет, чтобы это была запланированная задача». Например, вы можете настроить запланированную задачу, которая запускается при каждом входе в систему, что похоже на то, что вам нужно. Вы также можете поймать событие «Закрытие» и (из кода) настроить еще одну запланированную задачу, чтобы перезапустить себя несколько мгновений спустя.

Что босс, вероятно, не получает, так это то, что услуги являются особенными. Например, они освобождены от UAC. Поэтому они не могут разговаривать с пользователем. Если вы хотите что-то, что ходит и разговаривает как услуга, но также разговаривает с пользователем, слово Windows 7 для этого является запланированной задачей.

+0

Ха-ха, это то, что я закончил делать. – Brandi

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