c# 看门狗 程序_看门狗制作东西怎么切换

c# 看门狗 程序_看门狗制作东西怎么切换C#制作简单的看门狗程序这个类实现了程序退出能重启,但是程序停止运行弹出对话框,进程并没有退出却无法重启。希望有好建议处理这个bug的朋友提出你们的宝贵意见。源码如下:usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;usingSystem.Diagnostics;usi

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全家桶1年46,售后保障稳定

这个类实现了程序退出能重启,但是程序停止运行弹出对话框,进程并没有退出却无法重启。希望有好建议处理这个bug的朋友提出你们的宝贵意见。
源码如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Diagnostics;
using System.Threading;
using System.Runtime.InteropServices;
public  class ProcessWatcher
{
/// <summary>
/// 进程列表
/// </summary>
public List<MyProcess> myProcessList;
private Thread watchThread;
private int watchWaitingTime = 20;
/// <summary>
/// 初始化
/// -1 process.mj 文件不存在
/// 0 看护进程不存在
/// 1 成功
/// 2 部分进程路径不正确
/// </summary>
/// <returns></returns>
public int init()
{
if (!System.IO.File.Exists("process.mj")) return -1;
string[] processPath = System.IO.File.ReadAllLines("process.mj",Encoding.Default);
int count = 0;
myProcessList = new List<MyProcess>();
foreach (string path in processPath)
{
if (System.IO.File.Exists(path))
{
count++;
MyProcess mp = new MyProcess(path);
myProcessList.Add(mp);
}  
}
if (count == 0) return 0;
if (count == processPath.Length) return 1;
return 2;
}
/// <summary>
/// 启动守护
/// 
/// </summary>
/// <param name="sleepTime">等待时间</param>
/// <returns></returns>
public int watchStart(int sleepTime)
{
watchWaitingTime = sleepTime;
watchStop();
watchThread = new Thread(watch);
watchThread.Start();
return 0;
}
/// <summary>
/// 关闭守护
/// </summary>
/// <returns></returns>
public int watchStop()
{
try
{
watchThread.Abort();
}
catch
{ }
return 0;
}
/// <summary>
/// 守护线程,死循环
/// </summary>
private void watch()
{
while (true)
{
if (myProcessList == null) return;
if (myProcessList.Count < 1) return;
foreach (MyProcess mp in myProcessList)
{
if (!mp.isAlive())
{
//Thread.Sleep(1000);
//if (!mp.isAlive()) mp.start();
mp.start();
}
}
Thread.Sleep(watchWaitingTime*1000);
}
}
/// <summary>
/// 全部重启,如果已经启动则先关闭
/// </summary>
public void startAll()
{
if (myProcessList == null) return;
if (myProcessList.Count < 1) return;
foreach (MyProcess mp in myProcessList)
{
if (!mp.isAlive()) mp.start();
}
}
/// <summary>
/// 关闭所有守护进程
/// </summary>
public void stopAll()
{
if (myProcessList == null) return;
if (myProcessList.Count < 1) return;
foreach (MyProcess mp in myProcessList)
{
mp.stop();
}
}
/// <summary>
/// 进程状态
/// 1 显示界面
/// 2 影藏界面
/// 3 重启
/// 4 停止
/// </summary>
/// <param name="state"></param>
/// <param name="name"></param>
public void setProcessState(int state,string name)
{
foreach (ProcessWatcher.MyProcess p in myProcessList)
{
if (p.Name == name)
{
switch (state)
{
case 1:
p.show();
break;
case 2:
p.hide();
break;
case 3:
p.start();
break;
case 4:
p.stop();
break; 
}
break;
}
}
}
/// <summary>
/// 判断某个线程是否存在
/// </summary>
/// <param name="name">线程名字</param>
/// <returns></returns>
public Boolean processIsAlive(string name)
{
if (myProcessList == null) return false;
if (myProcessList.Count < 1) return false;
foreach (MyProcess mp in myProcessList)
{
if (mp.Name == name)
{
return mp.isAlive();
}
}
return false;
}
/// <summary>
/// 显示窗体
/// </summary>
/// <param name="hWnd">窗体句柄</param>
/// <param name="nCmdShow">0 隐藏,1显示</param>
/// <returns></returns>
[DllImport("user32.dll", EntryPoint = "ShowWindow", SetLastError = true)]
static extern bool ShowWindow(IntPtr hWnd, uint nCmdShow);
public class MyProcess
{
private  string name;
private  string path;
private IntPtr ptrHide;
//private Process process;
public MyProcess(string path)
{
string[] s = path.Split('\\');
this.name = s[s.Length-1];
this.name = name.Substring(0,name.Length-4);
this.path = path;
ptrHide = IntPtr.Zero;
}
/// <summary>
/// 进程名字
/// </summary>
public string Name
{
get { return name; }
}
/// <summary>
/// 进程路径
/// </summary>
public string Path
{
get { return path; }
}
/// <summary>
/// 进程状态
/// </summary>
/// <returns></returns>
public Boolean isAlive()
{
Process p = process();
if (p == null) return false;
if (p.Responding == true) return true;
return !p.HasExited;
//try
//{ 

// return process().Responding;
//}
//catch
//{ 

// return false;
//}
}
/// <summary>
/// 启动,如果已经启动,则关闭后再启动
/// </summary>
public void start()
{
stop();
Thread.Sleep(500);
Process.Start(path);
writeLog("启动程序"+name);
}
/// <summary>
/// 关闭
/// </summary>
public void stop()
{
try
{
process().Kill();
writeLog("关闭程序" + name);
}
catch
{ }
}
/// <summary>
/// 显示
/// </summary>
public void show()
{
if (process() != null)
{
if (ptrHide == IntPtr.Zero)
{
ShowWindow(process().MainWindowHandle, 1);
}
else
{
ShowWindow(ptrHide, 1);
ptrHide = IntPtr.Zero;
}
}
}
/// <summary>
/// 隐藏
/// </summary>
public void hide()
{
if (process() != null)
{
if (ptrHide != IntPtr.Zero) return;  //防止多次隐藏。
ptrHide = process().MainWindowHandle;//隐藏前保存窗体句柄,隐藏后从新获取的句柄与此不同。
ShowWindow(ptrHide, 0);
}
}
/// <summary>
/// 获取进程
/// </summary>
/// <returns></returns>
private Process process()
{
Process[] proc = Process.GetProcessesByName(name);
if (proc.Length > 0)
{
return proc[0];
}
return null;
}
/// <summary>
///
/// </summary>
readonly static ReaderWriterLockSlim _rw = new ReaderWriterLockSlim();
/// <summary>
/// 写日志文件
/// </summary>
/// <param name="str_msg"></param>
public static void writeLog(string str_msg)
{
if (System.IO.Directory.Exists("logW") == false) System.IO.Directory.CreateDirectory("logW");
string msg = DateTime.Now.ToLongDateString() + DateTime.Now.ToLongTimeString() + ":" + str_msg + "\r\n";
_rw.EnterWriteLock();
System.IO.File.AppendAllText("logW\\" + DateTime.Now.ToString("yyyyMMdd") + ".txt", msg);
_rw.ExitWriteLock();
string[] s = System.IO.Directory.GetFiles("logW");
if (s.Length > 7)
{
System.IO.File.Delete(s[0]);
}
}
}
}

Jetbrains全家桶1年46,售后保障稳定

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/234048.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(2)


相关推荐

  • pycharm2021.5激活码[在线序列号]

    pycharm2021.5激活码[在线序列号],https://javaforall.cn/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

  • idea2021.8.3激活码永久(JetBrains全家桶)「建议收藏」

    (idea2021.8.3激活码永久)好多小伙伴总是说激活码老是失效,太麻烦,关注/收藏全栈君太难教程,2021永久激活的方法等着你。https://javaforall.cn/100143.htmlIntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,上面是详细链接哦~Z9LZO4ZKWA-eyJsaWNlbnNlSWQiOi…

  • stm32直流电机控制—PID算法篇

    stm32直流电机控制—PID算法篇stm32直流电机控制—PID算法篇提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加例如:第一章Python机器学习入门之pandas的使用**加粗样式*提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录stm32直流电机控制—PID算法篇前言一、pandas是什么?二、使用步骤1.引入库2.读入数据总结前言提示:这里可以添加本文要记录的大概内容:例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了

  • 前端_单页面开发_web前端框架

    前端_单页面开发_web前端框架   web移动端单页面开发,可适用于web端直接开发。本例需要使用require.js帮助实现。   单页面开发个人理解:对一个项目里面的所有html文件都拥有同一个url,通过hash值的改变来促发页面的跳转(hash为url后面的内容,如下面的#red和#green就是hash),如两个页面的url分别为(http://localhost:8000/views/index.htm…

    2022年10月13日
  • 灰色关联度模型matlab_灰色关联分析法的适用范围

    灰色关联度模型matlab_灰色关联分析法的适用范围matlab之灰色关联分析法https://blog.csdn.net/m0_37286282/article/details/79183333

    2022年10月26日
  • use ida6.8 + windbg on win10[通俗易懂]

    use ida6.8 + windbg on win10[通俗易懂]序用ida6.8pro+windbgx64调试x64的pip.exe,说找不到windbg.我已经装了一个从csdn下载的windbgx64-v6.x.找资料,说要修改ida.cfg,添加IDA环境变量DBGTOOLS为x86版的windbg路径。尝试在dbg_windbg.cfg中添加DBGTOOLS,IDA启动时说在dbg_windbg.cfg中的DBGTOOLS环境

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号