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

编写 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类库,然后在项目中重新添加引用。
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值