c#程序删除自身代码示例分享
c#程序删除自身代码示例分享
发布时间:2016-12-28 来源:查字典编辑
摘要:在.NET程序中,因为运行中的程序是受系统保护的,不能自己删除自身的,所以自删除的思路:在关闭本程序之前启动新的进程打开另一个程序,调用这个...

在.NET程序中,因为运行中的程序是受系统保护的,不能自己删除自身的,所以自删除的思路:

在关闭本程序之前启动新的进程打开另一个程序,调用这个程序来删除原程序。然后再完成外部进程的销毁。

方法一:程序中打开新的进程,删掉程序后,再销毁进程本身

流程:首先生成一个BAT文件,然后让BAT执行删除动作,就是:

1、生成删除的BAT

2、运行BAT

3、快速退出

4、BAT开始删除EXE

5、BAT删除BAT

复制代码 代码如下:

private static void DeleteItself()

{

string vBatFile = Path.GetDirectoryName(Application.ExecutablePath) + "DeleteItself.bat";

using (StreamWriter vStreamWriter = new StreamWriter(vBatFile, false, Encoding.Default))

{

vStreamWriter.Write(string.Format(

":delrn" +

" del "{0}"rn" +

"if exist "{0}" goto delrn" +

"del %0rn", Application.ExecutablePath));

}

//************ 执行批处理

WinExec(vBatFile, 0);

//************ 结束退出

Application.Exit();

}

[System.Runtime.InteropServices.DllImport("kernel32.dll")]

public static extern uint WinExec(string lpCmdLine, uint uCmdShow);

方法二:程序中打开新的进程,调用cmd命令,删掉程序即可。

复制代码 代码如下:

private static void DeleteItselfByCMD()

{

ProcessStartInfo psi = new ProcessStartInfo("cmd.exe", "/C ping 1.1.1.1 -n 1 -w 1000 > Nul & Del " + Application.ExecutablePath);

psi.WindowStyle = ProcessWindowStyle.Hidden;

psi.CreateNoWindow = true;

Process.Start(psi);

Application.Exit();

}

下面解释命令的意思:

cmd /c 调用命令窗口执行dos指令

ping 1.1.1.1 -n 1 -w 1000 > Nul 利用 ping命令的 –w 参数指定延时1秒执行

& 连接下一个命令(用于一行执行多个命令)

Del <Application.ExecutablePath> 删除可执行文件

方法一:使用bat文件删除程序+自身,但其有临时bat文件生成。

方法二:利用某些dos命令的延时效果,在程序退出之后自动删除程序自身思路非常巧妙。也避免了bat方式,循环删除的问题。当然这种方法从本质上应该和方法一差不多。

突然想到“伴随进程”,也就是一个程序产生两个进程,定时检测另一个进程信号,如果其中一个进程被结束了,另一个进程就立刻重新启动被结束的进程,实现程序无法异常结束(特别是Windows结束任务)的效果!

对于这种伴随进程(一个主要工作进程,一个伴随进程)结束的办法:快速结束两个进程,当然如果两个进程的检测定时足够短,这种方法就不一定有效了。但可以用另一个假的伴随进程来处理而达到结束两个进程的目的。

推荐文章
猜你喜欢
附近的人在看
推荐阅读
拓展阅读
相关阅读
网友关注
最新C#教程学习
热门C#教程学习
编程开发子分类