您的位置:首页 > 编程语言 > C#

编写 Windows 服务程序时的常见问题

2016-12-22 09:43 190 查看
编写 Windows 服务在
Windows 服务程序开发 中有利用 c# 和 vs 的实现方法。下面列举一些在编写 windows 服务程序时遇到的一些问题及解决方法。

错误 1053: 服务没有及时响应启动或控制请求。



分析:如果服务启动函数 OnStart 里面放一个运行时间很长的方法,或者阻塞的方法时,就出现上面那个错误。

    另外一个原因可能是缺少了一些服务必需的dll。

解决方法:可以在 onStart() 里另起一个线程,在这个线程里可以 while(true),也可以执行阻塞的方法,在onStop()里面将线程杀掉。

对于第二个原因,双击服务程序文件,找出缺少的 dll 文件,将其拷贝到当前工程目录或者 c:\Windows\system32\ 目录下。

Thread threadforwork;
protected override void OnStart(string[] args)
{
// TODO: Add code here to start your service.
if (threadforwork == null)
{
threadforwork = new Thread(workFunction);    //新建一个线程
}
threadforwork.IsBackground = true;    //后台运行
threadforwork.Start();    //启动线程
}

protected override void OnStop()
{
// TODO: Add code here to perform any tear-down necessary to stop yourservice.
if (threadforwork != null)
{
if (threadforwork.ThreadState == System.Threading.ThreadState.Running)
{
threadforwork.Abort();
}
}

}
protected void workFunction()
{
//执行时间很长的方法
}


问题:本地计算机上的 XXX 服务启动后又停止。某些服务在未由其他服务或程序使用时将自动停止。



分析:应该是服务的代码有逻辑错误,打开控制面板/管理工具/事件查看器 ->应用程序 ,查看错误信息。



问题:System.IO.FileNotFoundException:"file:///D:\xxx.exe"未能加载文件或程序集

出现这种情况一般是路径里有空格,解决方法是把整个项目文件复制到另一个路径下面。

问题:System.ComponentModel.Win32Exception: 帐户名无效或不存在,或者密码对于指定的帐户。

将 serviceProcessInstaller1->Accout 属性,设为:LocalSystem (默认是 User )。

在调试 Windows 服务程序时,将服务程序附加到进程时,可能会出现下面的信息:

问题:生成下面的模块时,启用了优化或没有调试信息。



可能的解决方案有:

右击“解决方案”选择“配置管理器”,将"release”改为"debug".(或是:生成>>配置管理器>>活动解决方案配置>>Debug)。
<compilation debug="true"/>

工具--> 选项---> 调试----> 常规--> 禁用"启动仅我的代码"。

不要在引用和 BIN 文件夹中同时加如所要引用的类库DLL.在其中一个添加即可,也就是在你的项目文件的 Bin 中删除你引用的Dll类库,然后在项目中重新添加引用。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息