程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> C#刪除程序自身【總結】,

C#刪除程序自身【總結】,

編輯:C#入門知識

C#刪除程序自身【總結】,


出處:http://www.cnblogs.com/Interkey/ 

 偶然看到一個可以自刪除的程序,於是了解下如何實現。然後整理如下:

  思路:

  在.NET程序中,因為運行中的程序是受系統保護的,不能自己刪除自身的,所以自刪除的思路:

   在關閉本程序之前啟動新的進程打開另一個程序,調用這個程序來刪除原程序。然後再完成外部進程的銷毀。

  操作:

方法一:程序中打開新的進程,刪掉程序後,再銷毀進程本身

  流程:首先生成一個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> 刪除可執行文件
  可惜這種方法 由於xp不支持Choice命令,沒有測試成功。但在Win8 x64位上成功刪除自身。 

  總結:

       方法一:使用bat文件刪除程序+自身,但其有臨時bat文件生成。

       方法二:利用某些dos命令的延時效果,在程序退出之後自動刪除程序自身思路非常巧妙。也避免了bat方式,循環刪除的問題。當然這種方法從本質上應該和方法一差不多。

   但由於xp不支持Choice命令,所以在使用方面上推薦方法一。

   本文地址:http://www.cnblogs.com/Interkey/p/DeleteItself.html 

  擴展:

   突然想到“伴隨進程”,也就是一個程序產生兩個進程,定時檢測另一個進程信號,如果其中一個進程被結束了,另一個進程就立刻重新啟動被結束的進程,實現程序無法異常結束(特別是Windows結束任務)的效果!

  對於這種伴隨進程(一個主要工作進程,一個伴隨進程)結束的辦法:快速結束兩個進程,當然如果兩個進程的檢測定時足夠短,這種方法就不一定有效了。但可以用另一個假的伴隨進程來處理而達到結束兩個進程的目的。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved