C#實現刪除自身程式
阿新 • • 發佈:2018-12-22
因為課程需要,需要實現程式執行時刪除自身的效果,但是程式執行時是受到系統保護的,所以只能想別的方法 。
思路是:在本程式未關閉時呼叫其他程式,使被呼叫的程式在源程式關閉後刪除程式本身。
使用C#刪除自身的exe程式,共有兩種方法。
方法一:使用bat檔案刪除程式+自身,但其有臨時bat檔案生成。
方法二:利用某些dos命令的延時效果,在程式退出之後自動刪除程式自身思路非常巧妙。也避免了bat方式,迴圈刪除的問題。當然這種方法從本質上應該和方法一差不多。
方法一:程式中開啟新的程序,刪掉程式後,再銷燬程序本身
流程:首先生成一個BAT檔案,然後讓BAT執行刪除動作,就是: 1、生成刪除的BAT 2、執行BAT 3、快速退出 4、BAT開始刪除EXE 5、BAT刪除BAT
/// <summary>
/// 刪除程式自身(本文地址:http://www.cnblogs.com/Interkey/p/DeleteItself.html)【推薦】
/// </summary>
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(
":del\r\n" +
" del \"{0}\"\r\n" +
"if exist \"{0}\" goto del\r\n" +
"del %0\r\n", Application.ExecutablePath));
}
//************ 執行批處理
WinExec(vBatFile, 0);
//************ 結束退出
Application.Exit();
}
[System.Runtime.InteropServices.DllImport("kernel32.dll")]
public static extern uint WinExec(string lpCmdLine, uint uCmdShow);
方法二:程式中開啟新的程序,呼叫cmd命令,刪掉程式即可。
/// <summary>
/// 刪除程式自身(本文地址:http://www.cnblogs.com/Interkey/p/DeleteItself.html)
/// </summary>
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> 刪除可執行檔案
程式例項: