windows Service循环任务.服务启动后无法停止重启的解决办法

摘要:
protectedoverridevoidOnStart(string[]args){while(true){try{workflow.ProcessWorkFlowMQ();Thread.Sleep(150);}catch(异常1){Logger.Error(e1.Message);}}上述代码将导致在成功安装后无法通过Windows Service Management启动和停止服务器。例如,需要更换

protected override void OnStart(string[] args)
{

while(true)
{
try
{
workflow.ProcessWorkFlowMQ();
Thread.Sleep(150);
}
catch (Exception e1) 
{
Logger.Error(e1.Message);
}
}
}

如上代码会造成 服务器安装成功后无法通过windows服务管理进行启动停止.比如说需要更换运行的服务器帐号就无法操作.

分析原因是因为OnStart方法无法执行结束.造成的.所以需要使用多线程来处理

OnStart方法内使用多线程 OnStop方法内部停止循环线程.测试通过服务可以正常启动停止.

代码如下

protected override void OnStart(string[] args)
{

Logger.Error("工作流监控信息启动!" + Environment.NewLine);
thread = new Thread(new ThreadStart(StartProcess));//启用另外一个线程来处理业务.否则 OnStart方法执行不完.服务无法进行停止启动操作.
thread.Start();

}

protected void StartProcess() 
{
int i = 0;
while (true)
{

try

workflow.ProcessWorkFlowMQ();
Thread.Sleep(150);
i = 0;
}
catch (Exception e1)
{
//Logger.Error(e1.Message);
// i++;
// Thread.Sleep(500 * i);
// if (i == 200) 
// {
// thread.Abort();
// }
}
}
}

protected override void OnStop()
{
thread.Abort();
}

但是这样是修改程序的办法,无法解决正在运行中的程序,我试过用软件卸载也无法,只能通过命令方式

要停止这个服务,首先记住这个服务的名称,在这里是 ‘PlatformMessageService’.

然后打开命令行窗口,运行 sc queryex 命令来获取服务的 PID,接着使用 taskkill 命令来停止它。

C:\>sc queryex PlatformMessageService

SERVICE_NAME: PlatformMessageService
TYPE               : 10  WIN32_OWN_PROCESS
STATE              : 2  START_PENDING
(NOT_STOPPABLE, NOT_PAUSABLE, IGNORES_SHUTDOWN))

WIN32_EXIT_CODE    : 0  (0x0)
SERVICE_EXIT_CODE  : 0  (0x0)
CHECKPOINT         : 0x1
WAIT_HINT          : 0xbb8
PID                : 524
FLAGS              :

C:\>taskkill /PID 524 /F
SUCCESS: The process with PID 3756 has been terminated.


看完帖子觉得有帮助的朋友多支持下我的淘宝店铺:http://siwa8.taobao.com

免责声明:文章转载自《windows Service循环任务.服务启动后无法停止重启的解决办法》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Unity3D实践系列02,查看Scene窗口物体汇编语言 学习笔记(基础知识二----地址总线、数据总线、控制总线)下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

随便看看

Xmind常用快捷键

快捷鍵(WINDOWS)快捷鍵(MAC)描述Ctrl+NCommand+N建立新工作簿Ctrl+OCommand+O开启工作簿Ctrl+SCommand+S储存目前工作簿Ctrl+Shift+SCommand+Shift+S储存全部工作簿Ctrl+WCommand+W关闭目前工作簿Ctrl+Shift+WCommand+Shift+W关闭全部工作簿Ctrl+...

android studio如何查看数据库文件

Android Studio可以通过两种方式查看数据库文件:1。SQLCOUT优点:功能强大。缺点:解决麻烦。2.Android DeviceMonitor中FileExpoler的优点:免费缺点:需要导出数据库并使用数据库可视化工具查看;手机需要root获得su权限,并通过adb命令修改/data/data/data下数据库文件的访问权限。具体修改方法:...

flutter 蓝牙开发记录

返回设备ID列表//您可以提前注册以扫描收听事件FlutterBlueflatterBlue=FlutterBlue。例子输出到uisetState((){this._blueDevice.add(r);防止多个扫描操作报告错误)FlutterBlueflatterBlue=FlutterBlue.instance;...

JS前端数据多条件筛选(商品搜索)

有时候也会需要在前端进行数据筛选,增强交互体验。当数据可用的筛选条件较多时,把逻辑写死会给后期维护带来很大麻烦。进行商品按条件筛选主要是利用Arrary.prototype.filter对数组元素进行遍历检查,返回一个符合检查条件的新数组,不会改变原数组。为了能自动适配不同的筛选条件,将筛选条件分为两个大类,一个是区间类型rangesFilter,如:品牌、...

Swift开发中 JSON对象/JSON字符串/Data的互转

本文将介绍常见的转换#pragmark JSON(object)------˃JSON string 1,原生方法//JSON------˃data------˃JSON string letdata=try?JSON序列化。data#pragmark数据------˃JSON(对象)1.本机方法guardletarray=try?[[String:AnyO...

vue 获取元素高度

1、html2、JavaScript//获取高度值(内容高+padding+边框)letheight=this.$refs.getheight.offsetHeight;//获取元素样式值(存在单位)letheight=window.getComputedStyle(this.$refs.getheight).height;//获...