C#中程序自删除实现方法
作者:Danny_hi
这篇文章主要介绍了C# 程序自删除实现方法,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
C#程序自删除
核心实现方法就是调用 cmd 传入命令行,等待几秒之后删除文件;
应用程序在运行时,是不能将 exe 文件进行删除的。但是可以将 exe 改名以及在驱动器内进行移动文件;
删除应用程序可以让 cmd 进行删除,在 cmd 可以使用 timeout 命令延迟,然后通过 && 进行执行后续逻辑,从而实现延迟执行命令。
让 cmd 延迟执行 DEL 命令进行删除应用,在应用调用删除之后,让应用程序结束即可
代码如下
static void Main(string[] args) { var fileName = Process.GetCurrentProcess().MainModule.FileName; DelayDeleteFile(fileName, 2); //这里是关闭程序后2秒删除程序 } private static void DelayDeleteFile(string fileName, int delaySecond = 2) { fileName = Path.GetFullPath(fileName); var folder = Path.GetDirectoryName(fileName); var currentProcessFileName = Path.GetFileName(fileName); var arguments = $"/c timeout /t {delaySecond} && DEL /f {currentProcessFileName} "; var processStartInfo = new ProcessStartInfo() { Verb = "runas", // 如果程序是管理员权限,那么运行 cmd 也是管理员权限 FileName = "cmd", UseShellExecute = false, CreateNoWindow = true, // 如果需要隐藏窗口,设置为 true 就不显示窗口 Arguments = arguments, WorkingDirectory = folder, }; Process.Start(processStartInfo); }
Winform使用示例
static void Main() { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.Run(new Form1()); var fileName = Process.GetCurrentProcess().MainModule.FileName; DelayDeleteFile(fileName, 2); } private static void DelayDeleteFile(string fileName, int delaySecond = 2) { fileName = Path.GetFullPath(fileName); var folder = Path.GetDirectoryName(fileName); var currentProcessFileName = Path.GetFileName(fileName); var arguments = $"/c timeout /t {delaySecond} && DEL /f {currentProcessFileName} "; var processStartInfo = new ProcessStartInfo() { Verb = "runas", // 如果程序是管理员权限,那么运行 cmd 也是管理员权限 FileName = "cmd", UseShellExecute = false, CreateNoWindow = true, // 如果需要隐藏窗口,设置为 true 就不显示窗口 Arguments = arguments, WorkingDirectory = folder, }; Process.Start(processStartInfo); }
WPF使用示例
首先在app.xaml中添加ShutdownMode=“OnExplicitShutdown”,删除StartupUri=“MainWindow.xaml”
然后在app.xaml.cs中添加如下代码:
protected override void OnStartup(StartupEventArgs e) { base.OnStartup(e); new MainWindow().ShowDialog(); var fileName = Process.GetCurrentProcess().MainModule.FileName; DelayDeleteFile(fileName, 2); Application.Current.Shutdown(); } private static void DelayDeleteFile(string fileName, int delaySecond = 2) { fileName = Path.GetFullPath(fileName); var folder = Path.GetDirectoryName(fileName); var currentProcessFileName = Path.GetFileName(fileName); var arguments = $"/c timeout /t {delaySecond} && DEL /f {currentProcessFileName} "; var processStartInfo = new ProcessStartInfo() { Verb = "runas", // 如果程序是管理员权限,那么运行 cmd 也是管理员权限 FileName = "cmd", UseShellExecute = false, CreateNoWindow = true, // 如果需要隐藏窗口,设置为 true 就不显示窗口 Arguments = arguments, WorkingDirectory = folder, }; Process.Start(processStartInfo); }
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。