由Windows服务启动后,进程在云中无法运行
本文关键字:运行 进程 服务 Windows 启动 | 更新日期: 2023-09-27 18:04:42
我们有一个Windows服务,检查配置文件,并基于这些设置,启动一个新进程(让我们称之为ClusterProcess),它连接到数据库并执行实际功能。
有一个测试项目,它去掉了Windows Service在游戏中的角色,只提供ClusterProcess必要的设置。
对于我们当前的测试环境,我们在云上有数据库,我想说,相当有限的权限。
我的问题是:当我运行测试项目时,ClusterProcess得到它的设置和数据库上发生的事情。但是,当我运行Windows服务时,数据库上没有任何变化。
我一直在使用log4net试着看看事情发生的地方,但它似乎默默地失败了。
Windows Service调用这个:
_ClusterRunnner.StartAllClusters();
在上面提到的方法中,这是(除其他事项外)发生的情况,并且我得到了两个日志语句:
_ClusterProcesses = new List<Process>();
log.Debug("Cluster Name: " + cluster.Name + " ConfigPath: " + _ConfigPath);
_ClusterProcesses.Add(Process.Start(startInfo));
log.Debug("After process spawn.");
它应该启动的进程是ClusterProcess.exe,在该项目的Main方法中,我没有得到任何应该给出的日志语句,例如:
log.Debug("Going to Start Processing");
_ClusterProcessor = new ClusterProcessor(config);
_ClusterProcessor.StartProcessing();
log.Debug("Finished Processing");
与log4net我有一个特殊的记录器为ClusterProcess.exe(两个appender,一个RollingFileAppender和一个AdoNetAppender)和类似的appender为Windows服务。(Windows Service进程持有对其RollingFileAppender的锁,因此我必须为ClusterProcess.exe创建一个特殊的锁。adonetappeners用于在与数据库建立连接后格式化的日志。
但是现在,测试项目只是直接调用它:
ClusterProcessor x = new ClusterProcessor(config);
x.StartProcessing();
,它工作!我在StartProcessing()中得到日志语句,数据库被更改。
有什么想法吗?
从我使用服务的经验来看,它们的运行权限非常有限。所以,如果你的测试(可能是windows应用程序)运行完美,那么我猜它与用户权限有关。
我猜你不能真正访问文件系统,所以如果你的记录器写入硬盘上的一个地方,你应该考虑windows事件日志->写入windows应用程序事件日志而不注册事件源
要尝试它是否与用户权限有关,只需在windows服务设置中打开您的服务,并让它以您的管理员帐户登录,看看它是否与此有关