在Windows服务中读取注册表

时间:2018-06-06 11:52:28

标签: c# visual-studio windows-services

我使用VS2017模板创建了一个Windows服务,它创建了两个类:Program.cs和Service1.cs:

Program.cs Main()函数代码分开如下:

#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...
}

现在的问题是,当我在VS中使用DEBUG模式时,它转到//more code并正确编程从注册中读取值。但是,当我切换到RELEASE模式并部署服务然后安装时,它会在此while

之后循环

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

companyCardNumer没有任何价值。

是什么导致了这个问题?我是否需要任何管理权限才能从注册表中读取值?这将是奇怪的,因为作为用户我可以修改注册。我注意到的另一件事是服务状态,因为大多数服务都已启动,但是我的正在启动(如果可以的话)。但它仍在工作,但companyCardNumber是空的。

0 个答案:

没有答案
相关问题