2012-02-24 67 views
1

我有一个Windows服务,覆盖OnStart和OnStop方法来调用类库。我正在使用生产者/消费者模型(请参阅http://www.albahari.com/threading/part4.aspx#_Wait_Pulse_Producer_Consumer_Queue,了解我的想法/逻辑)。Windows服务不调用类库

我遇到的问题是由于某种原因,操作不正确运行。这里的“(系统)行动”代码(timer_elapsed内):

_queue.EnqueueItem(() => 
{ 
    BuildFile file = new BuildFile(); 
    file.run(); 

    _writer.WriteLine("Gets Here: {0}", DateTime.Now.ToString()); 
    _writer.Flush(); 
}); 

正如你可能会看到,_writer基本上是“调试”记录工具。它写行出来时,它被称为文件(Windows服务运行了一个定时器):

_timer.Interval = 30000; //(3600000) 
_timer.Elapsed += new System.Timers.ElapsedEventHandler(timer_Elapsed); 
_timer.Enabled = true; 

对于一个测试,就是为BuildFile做出的第一个电话是一个简单的日志到数据库:

public BuildFile() 
{ 
    logEntry("Success", "I'm Running..."); 
} 

但日志条目永远不会被写入(该方法在其他地方工作正常)。

最怪异的部分是当我用控制台应用程序封装类时,它工作正常。该代码在Windows服务中完全相同,但它不会触发BuildFile。

有没有人看过类似的东西?

+2

控制台应用程序和服务应用程序很可能在不同的帐户下运行。确保服务帐户有权访问文件系统路径。另外,如果您正在使用Windows身份验证数据库,则还需要查看该数据库。 – 2012-02-24 19:16:25

+1

那么,我要做的第一件事就是将匿名方法重构为普通方法,以便您可以对其执行一些调试。如果我冒险猜测,我会说你的'file'变量在它有机会写入该日志条目之前超出了范围。 – 2012-02-24 19:18:20

+0

@Boo你可以把你的评论放入一个答案,工作(加上我的项目特别的几个其他步骤)。我想将其标记为已回答并获得您的信任!谢谢你的帮忙。 3天“浪费”在这。 – SlackerCoder 2012-02-27 19:56:55

回答

1

控制台应用程序和服务应用程序很可能运行在不同的帐户下。确保服务帐户有权访问文件系统路径。另外,如果您正在使用Windows身份验证数据库,则还需要查看该数据库。