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账号...

(0)


相关推荐

  • 云端呼叫中心坐席并发测试结果[通俗易懂]

    云端呼叫中心坐席并发测试结果[通俗易懂]很久没有写关于asterisk压力测试的相关文章了。今晚终于可以抽一点时间来写点东西,跟大家来分享一下。以下是本人最近开发的一套云端虚拟坐席租用系统,历经半年时间的实现和优化。          在近段时间,云端服务器是一个比较很热门话题,并且很大程度上综合硬件的资源的,节约成本的同时,还有的好处就是简化服务器部署的难度和时间。其他关于云端服务的其他好处,在此不必多说了,大家可以参考一

  • 如何制作whl文件「建议收藏」

    如何制作whl文件「建议收藏」wheel文件Wheel和Egg都是python的打包格式,目的是支持不需要编译或制作的安装过程,实际上也是一种压缩文件,将.whl的后缀改为.zip即可可看到压缩包里面的内容。按照官网说法,wheels是发行版Python的新标准并且要取代.egg。Egg格式是由setuptools在2004年引入,而Wheel格式是由PEP427在2012年定义。Wheel现在被认为是Python的二…

  • 耳机线的接法_耳机线焊接法图解大全

    耳机线的接法_耳机线焊接法图解大全耳机是我们日常必备工具,尤其是在公共场所或是夜深人静时!之前一直用的是入耳式的耳机,隔音效果好,声音大,所以下狠心买了一个用过最贵的耳机90+元。但是买回用了不到两个星期就让我给弄报废了,而且入耳式的耳机戴久了耳朵塞的疼。所以我就淘宝买了个8.6元包邮的山寨苹果耳机,结果带给了我很多惊喜,没想到音质丝毫不比之前的任何耳机差,戴着也舒服。最重要的是隔音效果好,每当夜深人静时无论是听音乐还是看剧都与世…

    2022年10月27日
  • 很黄色的JAVA游戏_《yellow》很黄!很暴力?居然有这么黄的游戏!

    很黄色的JAVA游戏_《yellow》很黄!很暴力?居然有这么黄的游戏!原标题:《yellow》很黄!很暴力?居然有这么黄的游戏!《yellow》是一款很“黄”但是一点也不暴力的解密益智类游戏,游戏一共有50关,每一关都非常非常的黄,不适宜长时间玩耍~游戏虽好玩但是要适度哦~游戏的特色就是黄,一打开游戏游戏的界面就和游戏的名字一样,玩家要通过自己的脑洞来进行通关,通关的方法也和游戏的名字一样,只要让游戏界面全部变黄了就能通关了,游戏的解密相对其他解密游戏简直亲切,…

    2022年10月15日
  • SpringMVC-@RequestMapping的参数和用法

    SpringMVC-@RequestMapping的参数和用法RequestMapping里面的注解包含的参数如图:RequestMapping是一个用来处理请求地址映射的注解,可用于类或方法上。用于类上,表示类中的所有响应请求的方法都是以该地址作为父路径。@RequestMapping除了修饰方法,还可来修饰类:类定义处:提供初步的请求映射信息。相对于WEB应用的根目录;方法处:提供进一步的细分映射信息。相对于类定义处的URL。若类定义处未

  • C语言实现选择排序

    C语言实现选择排序选择排序是在每一轮比较中不是每当a[i]<a[j]时候就交换,而是用一个变量k记下其中较小的元素的下标值,在a[i]与a[i+1]~a[n]全部进行比较后,只将a[i]与a[i+1]~a[n]中最小的值进行交换,为此每一轮只需要将a[i]与a[k]的值进行交换即可。设有n个数据存储到从a[0]~a[n+1]的n个数组元素中,则选择排序过程分为如下n-1步骤:第一步:在第1~n个数中找出最小者,然后与第一个数进行比较,前1个数排好序第二步:在第2~n个数中找出最小者,然后与第二个数进行交换,

发表回复

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

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