Как запустить приложение с графическим интерфейсом Windows в качестве службы?

Быстрое исправление:

Чтобы удалить зазор под изображением, вы можете:

  • Установить свойство vertical-align изображения на vertical-align: bottom; vertical-align: top; или vertical-align: middle;
  • Установите для свойства отображения изображения значение display:block;

См. следующий код для живой демонстрации:

#vAlign img {
  vertical-align :bottom;
}
#block img{
  display:block;
}

div {border: 1px solid red;width:100px;}
img {width:100px;}

No fix:

With vertical-align:bottom; on image:

With display:block; on image:


Объяснение: почему существует пробел под изображением?

Разрыв или дополнительное пространство под изображением не является ошибкой или проблемой, это поведение по умолчанию. Основная причина заключается в том, что изображения заменяются элементами ( см. MDN и W3C ). Это позволяет им «действовать как изображение» и иметь собственные собственные размеры, соотношение сторон ... Браузеры вычисляют свое свойство отображения inline, но они придают им особое поведение, которое приближает их к элементам inline-block (так как вы

Это также означает, что:

[...] когда изображения используются во встроенном контексте форматирования с выравниванием по вертикали: базовая линия, нижняя часть изображения будет отображаться на базовой линии контейнера. ( source: MDN , focus mine )

blockquote>

Поскольку браузеры по умолчанию вычисляют свойство vertical-align для базовой линии, это значение по умолчанию поведение. На следующем изображении показано, где базовая линия находится по тексту:

Location of the baseline on text [/g15]

Элементы, выровненные по базовой линии, должны содержать место для дескрипторов которые простираются ниже базовой линии (например, j, p, g ...), как вы можете видеть на приведенном выше изображении. В этой конфигурации нижняя часть изображения выравнивается по базовой линии, как вы можете видеть в этом примере:

div{border:1px solid red;}
img{width:100px;height:auto;}
jpq are letters with descender

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

div {width: 100px;border: 1px solid red;}
img {width: 100px;height: auto;}

.block img{
  display:block;
}
.bottom img{
  vertical-align:bottom;
}

Default:

With display:block;

With vertical-align:bottom;

30
задан JeffV 12 September 2008 в 00:32
поделиться

7 ответов

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

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

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

17
ответ дан McKenzieG1 12 September 2008 в 00:32
поделиться
  • 1
    Я попробовал все решения выше этого. Только эти работы. – Arshad 11 March 2018 в 17:30

Имеет любого, использовал сторонний продукт как: Всегда ?

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

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

6
ответ дан JeffV 12 September 2008 в 00:32
поделиться
  • 1
    Этот - тот, большая часть upvoted не работала, если контакт не был ранее добавлен к телефону. – Pablo Quemé 3 January 2018 в 13:45

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

4
ответ дан Mark Brackett 12 September 2008 в 00:32
поделиться

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

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

0
ответ дан Craig Tyler 12 September 2008 в 00:32
поделиться

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

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

0
ответ дан Brad Bruce 12 September 2008 в 00:32
поделиться
  • 1
    Это открывает конкретный контактный номер с конкретным текстом чата, но не отправляет его, пользователь должны нажать, отправляют, кнопка для отправляют сообщение. +1-Голосование за открытое конкретное действие. – Amandeep Rohila 25 May 2017 в 14:26

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

, НО!

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

Делают этот виртуальный компьютер автоматическим входом в систему окон (TweakUI может настроить это), и затем просто запустите приложение для GUI с помощью ярлыка на папку Startup. Вы можете даже удаленный рабочий стол в него использовать GUI программы (я держал пари, Всегда не может сделать этого).

0
ответ дан Aardvark 12 September 2008 в 00:32
поделиться
  • 1
    Прочитайте мой ответ на этот вопрос, он работает, не имея его в Вашем списке контактов. Работы отлично. – Crono 13 October 2017 в 17:55

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

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

0
ответ дан David L Morris 12 September 2008 в 00:32
поделиться
Другие вопросы по тегам:

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