开发者

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

开发者 https://www.devze.com 2023-01-26 10:19 出处:网络 作者: Danny_hi
目录C#程序自删除代码如下Winform使用示例wpF使用示例总结C#程序自删除 核心实现方法就是调用 cmd 传入命令行,等待几秒之后删除文件;
目录
  • 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); //php这里是关闭程序后2秒删除程序
    }
    
    private static void DelayDeleteFile(string fileName, int delaySecond = 2)
    {
      fileName = Path.GetFullPath(fileName);
      var folder = Path.GetDirectoryName(fileNajsme);
      varphp 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.GetDirect开发者_C开发oryName(fileName);
          var currentProcessFileName = Path.GetFileName(fileName);
    
          var arguments = $"/c timeout /t {delaySecond} && DEL /f {currentProcessFileName} ";
    
          var processStartInfo = new ProcessStartInfo()
          {
            Verb = "runas", // 如果程序是管理员权限,那么运行 cmd 也是管理员权限
            FileName = "cmd",
        android    UseShellExecute = false,
            CreateNoWindow = true, // 如果需要隐藏窗口,设置为 true 就不显示窗口
            Arguments = arguments,
            WorkingDirectory = folder,
          };
    
          Process.Start(processStartInfo);
        }

    总结

    以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。

    0

    精彩评论

    暂无评论...
    验证码 换一张
    取 消