在将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.如果还有别的放置位置我就不晓得了,但是最好是调试下项目 这样放置的位置才会一目了然.调试的方法已经放到上面了.