1. 程式人生 > >C#實現刪除自身程式

C#實現刪除自身程式

  因為課程需要,需要實現程式執行時刪除自身的效果,但是程式執行時是受到系統保護的,所以只能想別的方法 。
  思路是:在本程式未關閉時呼叫其他程式,使被呼叫的程式在源程式關閉後刪除程式本身。
  使用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> 刪除可執行檔案

程式例項: