Подтвердить что ты не робот

Как запустить приложение Windows GUI как службу?

У меня есть существующее графическое приложение, которое должно было быть реализовано как служба. В принципе, мне нужно иметь возможность удаленно регистрироваться на сервере Windows 2003 и выключать его и продолжать эту программу.

Возможно ли это?

EDIT: Дальнейшее уточнение здесь... У меня нет источника, это не мое приложение.

4b9b3361

Ответ 1

Службы Windows не могут иметь графические интерфейсы, поэтому вам нужно либо избавиться от графического интерфейса, либо отделить ваше приложение на две части - службу без пользовательского интерфейса и приложение "контроллер". Если у вас есть исходный код, преобразование кода без GUI в службу легко - Visual Studio имеет тип проекта "Служба Windows", который заботится об обертке для вас, и есть простое пошаговое руководство, в котором показано, как создавать проект развертывания, который позаботится об установке.

Если вы выберете второй маршрут и вам нужно поместить часть исходного кода GUI в контроллер, контроллер и служба могут связываться через соединения WCF,.NET Remoting или plain socket с протоколом, который вы сами определяете. Если вы используете Remoting, обязательно используйте "короткое" интерфейс, который передает данные с помощью как можно большего количества вызовов метода - каждый вызов имеет достаточное количество накладных расходов.

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

Ответ 2

Кто-нибудь использовал сторонний продукт, например: Always Up?

Кажется, нужно делать то, что мне нужно. Это возможность продолжать выполнение циклов входа/выхода из системы, которые мне нужны. И возможность игнорировать это приложение GUI и запускать его в любом случае.

Они должны быть связаны с exe вручную и вызывать WinMain или что-то в этом роде.

Ответ 3

Вы можете заключить его в srvany, хотя вам может потребоваться присвоить ему фактическую учетную запись пользователя (в отличие от LocalService или некоторых таких )

Ответ 4

Вам действительно нужно, чтобы он работал как служба, или вам просто нужно, чтобы он работал, когда вы не подключены? Если последнее, вы можете отключиться, а не выйти из системы, и приложение продолжит работу. Опция должна быть в выпадающем списке после выбора "Завершить работу" или вы можете вызвать tsdiscon.exe.

Ответ 5

У вас есть источник? Во многих случаях разница между автономным приложением и сервисом минимальна.

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

Ответ 6

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

Сказав, что вы можете установить свойства в службе для запуска в качестве пользователя, как это предложил Марк. Вы также можете указать в свойствах службы "Разрешить службе взаимодействовать с рабочим столом". Только сделайте это, если вы знаете, что пользователь будет зарегистрирован.

Ответ 7

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

Поскольку, по-видимому, причина для запроса заключается в том, чтобы иметь возможность удаленно отслеживать приложение, способ сделать это будет иметь два приложения. Сопровождающая сторона (написанная в основном как консольное приложение) и сторона клиентского/мониторинга GUI. Служба будет использовать некоторую удаленную связь (когда я сделал это, я использовал Именованные каналы) для связи с клиентом/мониторингом. Любой из них должен быть способен работать без другого, и, безусловно, служба должна работать с клиентом.

Ответ 8

Что произойдет, если вы создадите сервис. Эта служба настроена на взаимодействие с рабочим столом. Настройте его для запуска некоторого пользователя и автоматического запуска. Из сервиса CreateProcess в этом другом приложении. Я бы предположил, что это быстро попробовать использовать С# (C/С++ был много кода, чтобы даже быть сервисом, если я помню). Будет ли это работать?

НО!

Моя первая мысль заключалась в создании виртуального компьютера на виртуальном хосте сервера-сервера (например, Virtual Server, HyperV, VMWare). Эти виртуальные машины будут работать как служба (или независимо от того, что делает Hyper V). Виртуальная машина всегда будет работать - независимо от входа и выхода из системы.

Сделайте этот виртуальный компьютер автоматической регистрацией в Windows (TweakUI может установить это), а затем просто запустите приложение GUI, используя ярлык для папки автозагрузки. Вы даже можете использовать удаленный рабочий стол с помощью графического интерфейса программы (я уверен, что Always Up не может этого сделать).

Ответ 9

Вы можете использовать ServiceMill для достижения этой операции. В основном вы устанавливаете ServiceMill Server на свой сервер. Затем нажмите правую кнопку над исполняемым файлом и "Установите в качестве службы ServiceMill". Затем вы настраиваете некоторые вещи (пользователь/пароль, если вы хотите взаимодействовать с рабочим столом или если вы предпочитаете скрывать ui... и установить автоматический режим запуска).

Еще одним инструментом Active + Software может быть решение ServiceMill Exe Builder, которое позволяет создавать службы из командной строки, и это здорово, если вы используют сервер непрерывной интеграции или планируете распространять свой компонент как услугу, не задумываясь об интеграции услуг (плюс это бесплатно).

Ответ 10

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

Я использовал его для nginx, а за этот ответ.

Ответ 11

FireDaemonPro превращает большинство графических приложений в сервисы; это не бесплатно, но это может стоить того.