Службы Windows в Win7? - PullRequest
       28

Службы Windows в Win7?

1 голос
/ 25 марта 2010

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

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

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

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

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

Что я делаю не так?

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

Ответы [ 3 ]

1 голос
/ 25 марта 2010

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

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

1 голос
/ 26 марта 2010

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

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

0 голосов
/ 25 марта 2010

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...