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> 删除可执行文件

程序实例:

下载:http://download.csdn.net/detail/acingdreamer/9757359

©️2020 CSDN 皮肤主题: 程序猿惹谁了 设计师:上身试试 返回首页