由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应用程序事件日志而不注册事件源

要尝试它是否与用户权限有关,只需在windows服务设置中打开您的服务,并让它以您的管理员帐户登录,看看它是否与此有关