Настройка проекта для службы Windows и журнала событий - PullRequest
7 голосов
/ 02 февраля 2011

Я получил проект установки, который устанавливает службу Windows.

Мы регистрируем источник журнала событий в пользовательском журнале, который должен использоваться проектом winservice (как и почему это не важно).

Моя проблема в том, что проект установки пытается создать источник журнала событий по умолчанию.При этом он получает сообщение об ошибке ("Error 1001" source XXX already exists on local computer) и откатывается.

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

Как заставить службу Windows или проект установки НЕ создавать источник журнала событий?

Ответы [ 3 ]

7 голосов
/ 16 января 2012

Вы можете удалить значение по умолчанию EventLogInstaller:

namespace MyService
{
    [RunInstaller(true)]
    public partial class ProjectInstaller : Installer
    {
        public ProjectInstaller()
        {
            InitializeComponent();

            // Remove the default Event Log Installer
            EventLogInstaller DefaultInstaller = null;
            foreach (Installer installer in serviceInstaller1.Installers)
            {
                if (installer is EventLogInstaller)
                {
                    DefaultInstaller = (EventLogInstaller)installer;
                    break;
                }
            }
            if (DefaultInstaller != null)
            {
                serviceInstaller1.Installers.Remove(DefaultInstaller);
            }
        }
    }
}

Кроме того, вы можете изменить свойство Log:

foreach (Installer installer in serviceInstaller1.Installers)
{
    if (installer is EventLogInstaller)
    {
        ((EventLogInstaller)installer).Log = "MyLog";
        break;
    }
}

Теперь события будут успешно записываться в MyLog , и события запуска / остановки службы будут по-прежнему записываться в журнал Application .

(источник: компонент serviceInstaller и его стандартный EventLogInstaller )

3 голосов
/ 14 ноября 2011

Полагаю, что при удалении службы что-то удаляется неправильно, особенно в журнале событий.

Чтобы восстановить возможность переустановки службы снова, я обнаружил ( благодаря этой статье) Вам необходимо удалить этот ключ в реестре (regedit.exe):

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Eventlog\YOURSERVICENAME
2 голосов
/ 16 февраля 2011

Это только предположение, основанное на моих тестах.

Проект установщика (или класс WindowService) автоматически создает источник события с тем же именем, что и myService.ServiceName. Это наиболее вероятно, потому что сообщения Start / Stop записываются в журнал каждый раз, когда служба запускается / останавливается. И этим сообщениям нужен источник.

Другими словами: вам не нужно создавать источник с тем же именем, что и ServiceName, как это делается для вас.

...