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

Windows Service executes code in debug, but not in release

我正在开发 Windows 托管 WCF-web 服务的服务,当我 运行 它处于调试模式时它可以工作:

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

            ServiceBase.Run(ServicesToRun);

#endif

OnDebugStart()只是调用了Windows服务的OnStart()方法,而运行s的线程只是一个无限运行s的线程(直到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 并开始侦听数据库。当我在调试模式下启动它时,它工作得很好,但是当我 运行 它在发布时,服务被托管,但代码不执行。

我到处寻找相同类型的答案或问题,但我一无所获。因此,如果有人遇到过相同类型的问题,请告诉您您是如何解决的。

亲切的问候

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

要更改 运行 服务的帐户:

  1. 打开services.msc
  2. 右键单击服务名称
  3. 转到登录选项卡并将帐户更改为 the/an 具有正确权限的帐户
  4. 重启服务