当前位置 : 主页 > 网络编程 > c#编程 >

C#中程序自删除实现方法

来源:互联网 收集:自由互联 发布时间:2023-03-22
目录 C#程序自删除 代码如下 Winform使用示例 WPF使用示例 总结 C#程序自删除 核心实现方法就是调用 cmd 传入命令行,等待几秒之后删除文件; 应用程序在运行时,是不能将 exe 文件进行
目录
  • C#程序自删除
    • 代码如下
    • Winform使用示例
    • WPF使用示例
  • 总结

    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);
            }

    总结

    以上为个人经验,希望能给大家一个参考,也希望大家多多支持自由互联。

    上一篇:C#使用IronPython调用Python的实现
    下一篇:没有了
    网友评论