Чтение реестра в службе Windows - PullRequest
0 голосов
/ 06 июня 2018

Я создал службу Windows, используя шаблон VS2017, и он создал два класса: Program.cs и Service1.cs:

Код функции Main () Program.cs разделен, как показано ниже:

#if DEBUG
    Service1 service = new Service1();
    service.OnDebug();
    System.Threading.Thread.Sleep(System.Threading.Timeout.Infinite);

#else
    ServiceBase[] ServicesToRun;
    ServicesToRun = new ServiceBase[]
    {
        new Service1()
    };
    ServiceBase.Run(ServicesToRun);

#endif

Это помогает мне, пока я отлаживаю свой сервис перед выпуском.

В классе Service1.cs у меня есть метод OnDebug ():

public void OnDebug()
{
    OnStart(null);
}

и OnStartMethod () выглядит следующим образом:

protected override void OnStart(string[] args)
{
    const string keyPath = "HKEY_CURRENT_USER\\Software\\MyKey";
    string companyCardNumber = null;

    while (companyCardNumber == null || companyCardNumber.Equals(""))
    {
        companyCardNumber = (string)Registry.GetValue(keyPath, "CompanyCardNumber", null);

        if (companyCardNumber != null && !companyCardNumber.Equals(""))
        {
            break;
        }
        Debug.WriteLine("company card number in registry is empty or key doesn't exist");
        System.Threading.Thread.Sleep(5000);
    }
    //more code...
}

Теперь проблема в том, что когда я использую режим DEBUG в VS, он переходит на //more code и программа корректно считывает значение из реестра.Но когда я переключаюсь в режим RELEASE и развертываю службу, а затем устанавливаю, она зацикливается в этом while и после

companyCardNumber = (string)Registry.GetValue(keyPath, "CompanyCardNumber", null);

companyCardNumer не имеет никакого значения.

Что вызывает эту проблему?Нужны ли мне какие-либо административные привилегии для чтения значений из реестра?Это было бы странно, потому что, как пользователь, я могу изменять регистр.Еще одна вещь, которую я заметил, это состояние сервиса, потому что большинство сервисов запущены, но мой запускается (если я могу так сказать).Но он все еще работает, но companyCardNumber пусто.

...