C#中程序自删除实现方法
作者:Danny_hi 发布时间:2021-06-01 19:47:29
标签: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);
}
来源:https://blog.csdn.net/qq_43024228/article/details/122404162


猜你喜欢
- 这篇文章主要介绍了SpringBoot路径映射实现过程图解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要
- java.lang.ArrayStoreException 分析这个demo来说明怎样排查一个spring boot 1应用升级到sprin
- 测试代码如下: package swt_jface.demo; import org.eclipse.jface.window.Applic
- 一、ThreadLocal简介多线程访问同一个共享变量的时候容易出现并发问题,特别是多个线程对一个变量进行写入的时候,为了保证线程安全,一般
- 我们在使用数据库进行查询时,很多时候会用到分页展示功能,因此除了像mybatis这样的完善的orm框架之外,还有pagehelper这样的插
- 一、基本回收算法 1. 引用计数(Reference Counting) 比较古老的回收算法。原理是此对象有一个引用,即增加一个计数,删除一
- 本文实例为大家分享了Android双向选择控件DoubleSeekBar的使用方法,供大家参考,具体内容如下先看效果图1.DoubleSli
- selectById方法根据id,查询记录public void updateRecycleAssayBusinessItemCharge(
- 1.OkHttp发起网络请求可以通过OkHttpClient发起一个网络请求//创建一个Client,相当于打开一个浏览器 OkHttpCl
- 在我们开发过程中用 Mybatis 经常会用到下面的例子Mapper如下Map<String ,String > testArr
- 应用程序初始化时需要批量的向sqlite中插入大量数据,单独的使用for+Insert方法导致应用响应缓慢,因为 sqlite插入数据的时候
- java实现数据加密问题,具体代码如下所示:package Array;import java.util.Scanner;/*某个公司采用电
- 目录前言if-thenif-then-elseswitch使用 Stringwhiledo-whileforbreakcontinueret
- 1.编写核心类MainApp:package com.yiidian.gson;import com.google.gson.Gson;im
- 前言在java Thread类中,我们会看到interrupt()、interrupted()及isInterrupted(),在大多数情况
- 本文实例为大家分享了C语言实现贪吃蛇小游戏的具体代码,供大家参考,具体内容如下程序介绍代码#include<stdafx.h>?
- 下面我们就字符串连接方面分析。1.String打开String的源码,如图所示会发现存储字符串的字符数值是final常量。再看String的
- java 中的instanceof 运算符是用来在运行时指出对象是否是特定类的一个实例。instanceof通过返回一个布尔值来指出,这个对
- 本文实例为大家分享了Android实现蓝牙原理代码,供大家参考,具体内容如下package com.example.se7en.testbl
- 使用maven引入jar<dependency> <groupId>com.itextpdf</g