首页 新闻 会员 周边 捐助

C#写的windows服务问题

0
悬赏园豆:15 [已解决问题] 解决于 2017-05-18 12:50

小弟使用C#写了个Windows服务,把代码放在控制台程序跑,没什么问题,但就是在服务里,然后添加服务的时候就启动不起来,老是提示这个错误:

代码如下:

protected override void OnStart(string[] args)
        {while (true)
                {
                    var databaseModels = MongoDBHelper.Select<DataBaseServerConfigures>(Query.EQ("SystemAddress", BsonValue.Create(systemAddress)), MongoConnType.Center);
                    var dataModel = MongoDBHelper.Get<ActivityConfigures>(Query.EQ("ActivityName", BsonValue.Create("系统Ping设置")), MongoConnType.Center);
                    if (databaseModels.Count > 0)
                    {
                        if (dataModel != null)
                        {
                            foreach (var item in databaseModels)
                            {
                                MongoDBHelper.Insert<SystemPing>(
                                    new SystemPing()
                                    {
                                        ThisIP = prohelper.GetIPAddress(),
                                        PingIP = item.DataBaseName,
                                        SystemAddress = item.SystemAddress,
                                        Status = prohelper.GetSystemPing(item.DataBaseName),
                                        DateTimeNow = DateTime.Now
                                    }, MongoConnType.Center);
                            }
                            Thread.Sleep(dataModel.TntervalSecond);
                        }
                        else
                        {
                            foreach (var item in databaseModels)
                            {
                                MongoDBHelper.Insert<SystemPing>(
                                    new SystemPing()
                                    {
                                        ThisIP = prohelper.GetIPAddress(),
                                        PingIP = item.DataBaseName,
                                        SystemAddress = item.SystemAddress,
                                        Status = prohelper.GetSystemPing(item.DataBaseName),
                                        DateTimeNow = DateTime.Now
                                    }, MongoConnType.Center);
                            }
                            Thread.Sleep(30000);
                        }
                    }

                }
        }

什么原因啊?望大神帮忙看下!!

猫出没的主页 猫出没 | 菜鸟二级 | 园豆:219
提问于:2016-05-20 17:02
< >
分享
最佳答案
0

不能在OnStart里面直接死循环,可以把过程甩给一个线程去做。启动是有超时时间的,一旦过了超时时间onStart没有没有结束的话,服务就启动失败了。

收获园豆:15
Hoze | 初学一级 |园豆:196 | 2016-05-27 17:48

大神,Parallel.Invoke不也是类似于thread么?也是一个线程啊,这样写也会报错。。。

猫出没 | 园豆:219 (菜鸟二级) | 2016-06-06 15:49

@猫出没: Parallel是一个支持并行的类,就是把所有工作分配到CPU线程执行,并行的同时是卡主线程的。Invoke的作用就是把工作交给主线程去做,你可以使用System.Threading.Tasks.Task.Factory.StartNew()这个方法去开启并执行一个线程。

Hoze | 园豆:196 (初学一级) | 2016-06-07 14:04

@Hoze: 有点晕乎,StartNew()这个方法不就是开启一个线程么?他有主子之分么?

猫出没 | 园豆:219 (菜鸟二级) | 2016-07-19 09:51
其他回答(1)
0

给这个服务管理员权限试试

吴瑞祥 | 园豆:29449 (高人七级) | 2016-05-20 17:13

能说具体点吗?是

这两个的属性配置么?

支持(0) 反对(0) 猫出没 | 园豆:219 (菜鸟二级) | 2016-05-20 17:19

@猫出没: 跟代码没关系.修改运行的用户.在服务里.

支持(0) 反对(0) 吴瑞祥 | 园豆:29449 (高人七级) | 2016-05-20 20:53

@吴瑞祥: 不行,跟这个没有关系,试过了,他这个如果改成线程开启就没问题,直接while就卡死。。。真奇怪,,难不成是超时还是怎么??

支持(0) 反对(0) 猫出没 | 园豆:219 (菜鸟二级) | 2016-05-23 09:20
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册