Windows Service启动后,进程无法在云上运行

时间:2015-07-25 14:00:05

标签: c# windows

我们有一个Windows服务检查配置文件,并根据这些设置启动一个新的Process(让我们调用此ClusterProcess)连接到数据库并执行实际功能。

有一个测试项目,它会删除Windows服务在游戏中的部分,并且只为ClusterProcess提供必要的设置。

对于我们当前的测试环境,我们在云上拥有数据库,我会说,而是限制权限。

我的问题是:当我运行测试项目时,ClusterProcess获取其设置并在数据库上发生事情。但是,当我运行Windows服务时,数据库上没有任何更改。

我一直在使用log4net来尝试看看事情发生了什么,但它似乎无声地失败了。

因此Windows服务称之为:

_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)以及Windows服务的类似appender。 (Windows服务进程持有对其RollingFileAppender的锁定,因此我必须为ClusterProcess.exe创建一个特殊的.AdoNetAppenders用于在建立与数据库的连接后格式良好的日志。)

但是现在,测试项目只是直接调用它:

        ClusterProcessor x = new ClusterProcessor(config);
        x.StartProcessing();

它有效!我在StartProcessing()中获取了日志语句,并且数据库已更改。

所有想法?

1 个答案:

答案 0 :(得分:0)

根据我的服务经验,他们以非常有限的权利运作。 因此,如果您的Test(可能的Windows应用程序)运行完美,那么我猜它与用户权限有关。

我猜你无法真正访问文件系统,所以如果你的记录器写到硬盘上的某个地方,你应该考虑一下windows事件日志 - &gt; Write to Windows Application Event Log without registering an Event Source

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