Windows服务在调试中执行代码,但不在发布中执行

时间:2015-03-09 12:21:44

标签: c# web-services wcf windows-services

我正在开发一个托管WCF-webservice的Windows服务,当我在调试模式下运行它时,它可以正常工作:

#if DEBUG
        SynchroService myService = new SynchroService();
        myService.OnDebugStart();
#else
            ServiceBase[] ServicesToRun;
            ServicesToRun = new ServiceBase[] 
            { 
                new SynchroService() 
            };

            ServiceBase.Run(ServicesToRun);

#endif

OnDebugStart()只调用Windows服务的OnStart()方法,运行的线程只是一个无限运行的线程(直到调用OnStop())来检查服务是否仍处于活动状态&线上。

        protected override void OnStart(string[] args)
    {
        try
        {
            ServiceStatus serviceStatus = new ServiceStatus();
            serviceStatus.dwCurrentState = ServiceState.SERVICE_START_PENDING;
            SetServiceStatus(this.ServiceHandle, ref serviceStatus);

            syncService = new SynchroComService();
            myServiceHost = new ServiceHost(syncService);
            myServiceHost.Open();
            syncService.StartListening();

            thread = new Thread(CheckHost);
            thread.Start();
            serviceStatus.dwCurrentState = ServiceState.SERVICE_RUNNING;
            SetServiceStatus(this.ServiceHandle, ref serviceStatus);
        }
        catch (Exception ex)
        {
            WriteError(ex);
        }
    }

现在,当我创建WCF服务(syncService)时,它应该运行代码来启动SQLDependency并开始监听数据库。当我在debugmode中启动它时,这完全正常,但是当我在发布中运行它时,服务被托管,但代码不会执行。

我到处寻找相同类型的答案或问题,但我什么也没想出来。因此,如果每个人都遇到同一类型的问题,请告诉你如何解决它。

亲切的问候

1 个答案:

答案 0 :(得分:1)

问题不在于我的代码,而是运行服务时的权限 该服务是作为本地系统帐户启动的,但它没有运行服务/执行代码的权限。

要更改运行服务的帐户:

  1. 打开services.msc
  2. 右键单击服务名称
  3. 转到登录标签,将帐户更改为/具有正确权限的帐户
  4. 重新启动服务