程序的自我删除

转网上的:

 

 

 

[DllImport("kernel32.dll")] public static extern uint WinExec(string lpCmdLine, uint uCmdShow);

 

private void button1_Click(object sender, EventArgs e) {

    //在临时文件夹生成批处理文件     string vBatFile = Path.GetTempPath() + "[url=file://\\clear.bat]\\clear.bat[/url]";     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);

    //关闭窗体     this.Close(); }

 

 

 

 

在网上看到有两种方法用C#实现的主程序的自我复制,删除或叫自杀的功能,但都有一些缺点,就是有个命令行窗口闪一下,使得用户体验迅速下降,有没有办法解决这个问题呢,有!闲话少说,翠花上代码!

        private void Main_FormClosed(object sender, FormClosedEventArgs e)
        {
           
            string s = Process.GetCurrentProcess().MainModule.FileName;

            Process proRestart = new Process();
            proRestart.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;     //不显示窗体
            proRestart.StartInfo.UseShellExecute = true;
            string strArgument = " /c   del   " + s;

            //启动参数
            proRestart.StartInfo.Arguments = strArgument;
            proRestart.StartInfo.CreateNoWindow = true;
            proRestart.StartInfo.FileName = "c:\\windows\\system32\\cmd.exe";
            proRestart.Start();     //执行
            Process.GetCurrentProcess().Kill();

        }

其中里面命令行的参数可改为复制,剪切等。

网上的其它的方法也一并送上,供学习研究之用:

方法一:使用命令行(会闪黑屏,很不爽的感觉)。

  string s = System.Windows.Forms.Application.ExecutablePath;
Process.Start("Cmd.exe", "/c   del   " + s);
Process.GetCurrentProcess().Kill();  

方法二:创建.bat(会生成文件,如果没有文件访问权限会出错)

private void selfkill(){
RichTextBox bat=new RichTextBox();
bat.Text+="@echo off \n";
bat.Text+="setlocal \n";
bat.Text+=":try \n";
bat.Text+="del \""+Application.ExecutablePath+"\" \n";
bat.Text+="if exist \""+Application.ExecutablePath+"\" goto try \n";
bat.Text+="del \""+Application.StartupPath+"http://www.cnblogs.com/QinQouShui/admin/file://\\"+SaveFileName/+" \" \n";
bat.Text+="del \""+Application.StartupPath+"http://www.cnblogs.com/QinQouShui/admin/file://\\1.bat/ \" \n";
richTextBox1.Text=bat.Text;
richTextBox1.SaveFile(Application.StartupPath+"http://www.cnblogs.com/QinQouShui/admin/file://\\1.bat",RichTextBoxStreamType.TextTextOleObjs/);
richTextBox1.Clear();
Application.ExitThread();
System.Diagnostics.Process.Start(Application.StartupPath+"http://www.cnblogs.com/QinQouShui/admin/file://\\1.bat/");
}

 

posted @   秦秋随  阅读(1516)  评论(1编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
· AI Agent开发,如何调用三方的API Function,是通过提示词来发起调用的吗
点击右上角即可分享
微信分享提示