关于:lucene.net +盘古+window service 的调试问题

在将lucent.net +pangu +window service 在启动服务的时候出现了错误.

具体的错误 当然还是 服务启动了又停止了什么什么的.

是什么问题呢? 昨天的window service 昨天已经把这个错误解决了.

为什么还是报错.

什么办法解决呢? 调试代码才是王道. 当window service 怎么调试呢? 在网上找了一堆发现 下面的文章才是王道啊:

文章来自:http://www.cnblogs.com/xzwplus/archive/2008/03/30/1129452.html

关于调试windows service, 其实这是一个老生常谈的问题了.

通常的处理办法是, 在service运行后, 在调试器中选择attach to process.

然而这种做法也有一定的局限性, 例如在service启动时的OnStart事件中的代码, 基本上很难调试. 往往当attach到我们的service的时候, 这部分代码已经执行过了. 于是, 有人提出, 可以另写一个project来调用这个OnStart方法, 或将OnStart方法中的代码搬到另一个project中测试. 不过, 这些方法终究不是以windows服务的方式调试的, 不能够最真实的反应service运行时的执行状况(如权限问题等环境问题).

我的做法是, 在OnStart方法的最开始部分加上"Debugger.Launch()"的调用, 当service运行到此处时, 将会弹出一个选择调试器的对话框, 同时暂停在当前位置. 这样, 我们就做到了在代码中手动的启动调试器.

示例代码如下:

using System.Diagnostics;
 
 
public partial class MyService : ServiceBase{
    public MyService(){
        InitializeComponent();
    } 
 
 
    protected override void OnStart(string[] args){
#if DEBUG
        Debugger.Launch();    //Launches and attaches a debugger to the process.
#endif
        // TODO: add your initialize code here.
    } 
 
 
    protected override void OnStop(){
    }
}
 
 
调试的结果是: 没有找到C:\Program Files\计算机名\Dictionaries\dict.dct 的一部分....
这才明白原来是要将dictionaries文件放到服务安装文件夹的同级[如:安装的是setup1 就是在setup1同级] 在这纠正下昨天的文章 当然一般的控制台程序 放dictionarises文件夹的位置是在bin文件夹下面的,但是window service 是不同的.要放在的位置是
安装文件夹的同级.
当然如果使用的是:Dict\Dict.Dct 文件夹下面的 放置的位置又使不同的要放置的位置是:C:\Program Files\计算机名\Setup1(安装的服务名)\Dict\Dict.Dct.
如果还有别的放置位置我就不晓得了,但是最好是调试下项目 这样放置的位置才会一目了然.调试的方法已经放到上面了.


你可能感兴趣的:(service)