Не хочу использовать реестр в службе Windows

голоса
-2

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

Я получаю Источник собственность не была установлена ​​перед записью в журнал событий.

Пожалуйста посоветуй.

public Service()
{           
    try
    {
        InitializeComponent();
        if(!System.Diagnostics.EventLog.SourceExists(VWinService))
            System.Diagnostics.EventLog.CreateEventSource(VWinService,);
        eventLog1.Source = VWinService;
        eventLog1.Log = ;     

    }
    catch (Exception ex)
    {               
        eventLog1.WriteEntry(Error in Service Constructor.  Error message =  + ex.Message.ToString(), EventLogEntryType.Error);
    }
} 


 private void InitializeComponent()
    {       
        this.eventLog1 = new System.Diagnostics.EventLog();
        this.tmrSend = new System.Timers.Timer();
        ((System.ComponentModel.ISupportInitialize)(this.eventLog1)).BeginInit();
        ((System.ComponentModel.ISupportInitialize)(this.tmrSend)).BeginInit();
        this.tmrSend.Elapsed += new System.Timers.ElapsedEventHandler(this.tmrSend_Elapsed);
        this.AutoLog = false;
        this.ServiceName = VWinService;
        ((System.ComponentModel.ISupportInitialize)(this.eventLog1)).EndInit();
        ((System.ComponentModel.ISupportInitialize)(this.tmrSend)).EndInit();
    }
Задан 02/05/2014 в 13:09
пользователем
На других языках...                            


2 ответов

голоса
1

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

Запись одной ошибки в журнале событий:

EventLog eventLog = new EventLog();
eventLog.Source = "VWinService";
eventLog.WriteEntry(ex.Message, EventLogEntryType.Error, 0);

Логика для создания источника событий

if(!System.Diagnostics.EventLog.SourceExists("VWinService"))
    System.Diagnostics.EventLog.CreateEventSource("VWinService","");

принадлежит в инсталлятор и нет необходимости повторять в коде приложения службы. Если вы создали приложение службы с помощью наглядного мастера студии, то это обрабатывается для вас в автоматически сгенерированных ProjectInstallerклассов.

Если вы собираетесь использовать журналы событий и установить службу, то обязательно будет запись реестра на Windows. Создание этих необходимых записей реестра является обязанностью установщика программного обеспечения. Например, см InstallUtil , который использует ProjectInstallerклассы для установки приложения службы. Будьте уверены , что ваш клиент будет понять и согласиться , что параметры реестра , созданные установщиком для регистрации приложения в качестве сервиса и использовать журнал событий нормальны и необходимы для вашего приложения.

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

<configuration>
  <appSettings>
    <add key="myStringSetting" value="My string value"/>
    <add key="myNumericSetting" value="73"/>
  </appSettings>
</configuration>

Ваш код будет использовать System.Configurationпространство имен для чтения параметров:

using System.Configuration;

Читаешь значение конфигурации в вашем коде, как так:

string myString = ConfigurationManager.AppSettings["myStringSetting"];
int myNumber = Convert.ToInt32(ConfigurationManager.AppSettings["myNumericSetting"]);

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

Ответил 02/05/2014 в 13:13
источник пользователем

голоса
0

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

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

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

Ответил 03/05/2014 в 03:53
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more