程序的自我删除
转网上的:
[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/");
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
· AI Agent开发,如何调用三方的API Function,是通过提示词来发起调用的吗