在winform的开发过程中往往会有这样的应用场景,执行完成某任务之后,程序需要把本身删除掉。比如卸载。分享一个比较简单实现。
思路就是利用批处理,关闭文件后执行bat,bat执行删除主文件,然后删除自己
代码语言:javascript复制 static void Main(string[] args)
{
Console.Write("按任意键删除程序本身");
Console.ReadKey();
Thread t = new Thread(() =>
{
try
{
/*
调试的时候因为DeleteOwn.vshost.exe文件一直被vs占用所以删除会失效,直接执行就可以了
*/
using (FileStream fs = new FileStream("del.bat", FileMode.Create))
{
using (StreamWriter sw = new StreamWriter(fs, Encoding.ASCII))
{
sw.WriteLine("@echo off");
sw.WriteLine("ping -n 3 127.1 >nul");//休眠三秒后执行,确保程序已经退出
sw.WriteLine(string.Concat("del", " "", AppDomain.CurrentDomain.FriendlyName, """));//删除主程序,引号是保证文件名中包含空格也可以删除,FriendlyName修改名称后可以删除
sw.WriteLine("del %0");//删除自己
}
}
Process proc = new Process();
proc.StartInfo.FileName = "del.bat";
proc.StartInfo.UseShellExecute = false;//不显示命令行
proc.StartInfo.CreateNoWindow = false;//不在窗体展示
proc.Start();
}
catch { }
});
t.Start();
}