Самый простой язык для создания службы Windows

Каков самый простой язык для создания служб Windows?

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

Ответ 1

Если вы указали очевидное, если у вас есть фон C/С++/Java, я думаю, что С# предлагает вам самую низкую точку входа.

Предполагая, что вы используете Visual Studio 2008, вы можете выполнить следующие действия:

  • Откройте Visual Studio 2008 и выберите пункт меню "Файл | Новый | Проект".
  • В диалоговом окне "Новый проект"...
    • Выберите типы Visual С# | Windows node в типах проекта
    • Выберите шаблон службы Windows
    • Введите имя и местоположение для вашего проекта.
    • Нажмите OK
  • На этом этапе у вас есть все основы для службы Windows. Файл Program.cs содержит метод Main() для вашей службы, а Service1.cs определяет компонент System.ServiceProcess.ServiceBase, который является вашей новой службой Windows.
  • В компоненте Property Grid для вашего компонента Service1 рассмотрите возможность установки следующих свойств как минимум:
    • (Name) - дать объекту интуитивное имя, например ServiceExample
    • AutoLog - установить на false, чтобы предотвратить запись событий по умолчанию в журнал событий приложений (Примечание: я не говорю, что вы не должны регистрировать события службы, я просто предпочитаю писать в свой собственный журнал событий вместо журнал приложений - см. ниже)
    • CanShutdown - установить true, если вы хотите обрабатывать остановки системы
    • ServiceName - определяет имя, с помощью которого ваша служба будет известна диспетчеру управления службами (SCM)
  • В коде для ServiceExample виртуальные функции OnStart() и OnStop() вычеркнуты. Вам нужно будет заполнить их тем, что необходимо для вашего обслуживания. Если вы изменили свойство CanShutdown на true, вы также захотите переопределить метод OnShutdown. Я привел пример, иллюстрирующий использование этих функций.
  • На этом этапе сервис ServiceExample по существу завершен, но вам все равно нужен способ его установки. Для этого откройте компонент DesignExample в дизайнере. Щелкните правой кнопкой мыши в любом месте панели дизайнера и выберите пункт меню "Добавить установщик". Это добавляет компонент ProjectInstaller к вашему проекту, который содержит два дополнительных компонента: serviceProcessInstaller1 и serviceInstaller1.
  • Выберите компонент serviceProcessInstaller1 в дизайнере. В Property Grid рассмотрите настройку следующих свойств:
    • (Name) - дать вашему объекту интуитивное имя, например serviceProcessInstaller
    • Учетная запись - выберите учетную запись LocalService как минимум, но вам может потребоваться использовать учетную запись NetworkService или LocalSystem, если ваша служба требует больше привилегий.
  • Выберите компонент serviceInstaller1 в дизайнере. В Property Grid рассмотрите настройку следующих свойств:
    • (Имя) - дать объекту интуитивное имя, например, serviceInstaller
    • Описание - описание службы, которое будет отображаться в SCM для вашей службы.
    • DisplayName - дружественное имя для вашей службы, которое будет отображаться в SCM для вашей службы.
    • ServiceName - убедитесь, что это то же имя, которое вы выбрали для свойства ServiceName вашего компонента ServiceExample (см. шаг 4).
    • StartType - указывает, хотите ли вы, чтобы служба запускалась автоматически или вручную.
  • Помните, что я сказал, что предпочитаю записывать события в свой собственный журнал событий вместо журнала событий приложения. Для этого вам нужно будет заменить стандартный EventLogInstaller по умолчанию в ProjectInstaller с помощью настраиваемого. Сделайте свой код для ProjectInstaller следующим:

using System.Diagnostics;
[RunInstaller(true)]
public partial class ProjectInstaller : Installer
{
    public ProjectInstaller()
    {
        InitializeComponent();

        EventLogInstaller installer = FindInstaller(this.Installers);
        if (installer != null)
        {
            installer.Log = "ServiceExample"; // enter your event log name here
        }
    }

    private EventLogInstaller FindInstaller(InstallerCollection installers)
    {
        foreach (Installer installer in installers)
        {
            if (installer is EventLogInstaller)
            {
                return (EventLogInstaller)installer;
            }

            EventLogInstaller eventLogInstaller = FindInstaller(installer.Installers);
            if (eventLogInstaller != null)
            {
                return eventLogInstaller;
            }
        }
        return null;
    }
}

На этом этапе вы можете создать свой проект, чтобы получить исполняемый файл службы Windows. Чтобы установить службу, откройте командную строку Visual Studio 2008 и перейдите в каталог Debug или Release, где находится ваш исполняемый файл. В командной строке введите следующее: InstallUtil ServiceExample.exe. Это установит вашу службу на локальном компьютере. Чтобы удалить его, введите в командной строке следующее: InstallUtil/u ServiceExample.exe

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

Чтобы увидеть свою службу в действии, откройте файл ServiceExample.cs и внесите следующие изменения:

using System.Diagnostics;
public partial class ServiceExample : ServiceBase
{
    public ServiceExample()
    {
        // Uncomment this line to debug the service.
        //Debugger.Break();

        InitializeComponent();

        // Ties the EventLog member of the ServiceBase base class to the
        // ServiceExample event log created when the service was installed.
        EventLog.Log = "ServiceExample";
    }

    protected override void OnStart(string[] args)
    {
        EventLog.WriteEntry("The service was started successfully.", EventLogEntryType.Information);
    }

    protected override void OnStop()
    {
        EventLog.WriteEntry("The service was stopped successfully.", EventLogEntryType.Information);
    }

    protected override void OnShutdown()
    {
        EventLog.WriteEntry("The service was shutdown successfully", EventLogEntryType.Information);
    }
}

После запуска службы с этими изменениями вы можете посмотреть журнал событий ServiceExample в средстве просмотра событий и увидеть там зарегистрированные сообщения.

Надеюсь, что это поможет.

EDIT: если вы предпочитаете использовать журнал событий приложений для ведения журнала событий вместо пользовательского, просто не делайте никаких изменений в файле ProjectInstaller.cs. Кроме того, оставьте строку, которая задает свойство журнала EventLog в конструкторе ServiceExample. При запуске службы сообщения журнала появятся в журнале событий приложений.

Ответ 2

Я согласен со всеми, кто ответил в другом месте, но я бы сказал, не слишком сильно фокусируйтесь на фактическом языке, если вы работаете в .NET framework, и для вас есть стартовый проект, хорошо идти. В прошлом я делал несколько "служб Windows" и разработал их как в VB.NET, так и в С# с минимальным кодом.

То, что я рекомендовал бы OP, - это научиться создавать для него пакет установщика. Установка службы так же просто, как выполнение "installutil.exe {drive]\path\to\file.exe", но когда вам нужно делать что-то большее, чем развертывать службу "привет мир" Windows, хорошо знать и понимать, как действительно развертывайте службу значимым образом.

Не запускать пламенную войну, но я "стандартизовал" использование WiX для всех моих пакетов развертывания, за пределами делая старую школой COM-типа типа, так как это нагрузка на работу, чтобы установить ее правильно. Я очень хочу, чтобы команда WiX разработала кусок загрузочного диска, который позволяет помещать предварительные требования и основной msi в EXE файл, который можно загрузить. У них есть версия 3.5, поэтому я буду терпеливо ждать и теперь использовать исполняемые файлы WinZip Self-Extracting.

Ответ 3

Для меня, и я только пробовал это несколькими способами, Visual Studio и С# были самыми легкими.

Visual Studio выполнила всю необходимую настройку сервисной сантехники для фреймворка, и я обнаружил, что С# очень прост в освоении, переход с VB6, VB.NET и C.

Ответ 4

С Visual С# вы найдете большинство образцов кода в сети. В сочетании с Visual Studio, и это прогулка в парке, чтобы запустить базовую службу Windows. Visual Studio также позволяет быстро создать пакет установщика MSI.

Это был бы мой выбор

Ответ 5

Используйте проект типа службы Visual Studio, используйте С# или VB.NET.

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

Построение установщика также очень просто.

Ответ 6

Проект службы Windows в С# предоставит вам полностью развертываемый сервис из шаблона Visual Studio одним нажатием кнопки. Вам просто нужно добавить свой код полезной нагрузки.