因為課程需要,需要實現程序運行時刪除自身的效果,但是程序運行時是受到系統保護的,所以只能想別的方法 。 思路是:在本程序未關閉時調用其他程序,使被調用的程序在源程序關閉后刪除程序本身。 使用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) + "http://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> 刪除可執行文件程序實例:
下載:http://download.csdn.net/detail/acingdreamer/9757359
新聞熱點
疑難解答