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 代码的权限。
要更改 运行 服务的帐户:
- 打开services.msc
- 右键单击服务名称
- 转到登录选项卡并将帐户更改为 the/an 具有正确权限的帐户
- 重启服务
我正在开发 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 代码的权限。
要更改 运行 服务的帐户:
- 打开services.msc
- 右键单击服务名称
- 转到登录选项卡并将帐户更改为 the/an 具有正确权限的帐户
- 重启服务