当前位置:  编程技术>.net/c#/asp.net

c#程序删除自身代码示例分享

    来源: 互联网  发布时间:2014-10-29

    本文导语:  在.NET程序中,因为运行中的程序是受系统保护的,不能自己删除自身的,所以自删除的思路: 在关闭本程序之前启动新的进程打开另一个程序,调用这个程序来删除原程序。然后再完成外部进程的销毁。 方法一:程序中打开...

在.NET程序中,因为运行中的程序是受系统保护的,不能自己删除自身的,所以自删除的思路:

在关闭本程序之前启动新的进程打开另一个程序,调用这个程序来删除原程序。然后再完成外部进程的销毁。

方法一:程序中打开新的进程,删掉程序后,再销毁进程本身

流程:首先生成一个BAT文件,然后让BAT执行删除动作,就是:
1、生成删除的BAT
2、运行BAT
3、快速退出
4、BAT开始删除EXE
5、BAT删除BAT

代码如下:

private static void DeleteItself()
{
string vBatFile = Path.GetDirectoryName(Application.ExecutablePath) + "\DeleteItself.bat";
using (StreamWriter vStreamWriter = new StreamWriter(vBatFile, false, Encoding.Default))
{
vStreamWriter.Write(string.Format(
":delrn" +
" del "{0}"rn" +
"if exist "{0}" goto delrn" +
"del %0rn", Application.ExecutablePath));
}

//************ 执行批处理
WinExec(vBatFile, 0);
//************ 结束退出
Application.Exit();
}

[System.Runtime.InteropServices.DllImport("kernel32.dll")]
public static extern uint WinExec(string lpCmdLine, uint uCmdShow);

方法二:程序中打开新的进程,调用cmd命令,删掉程序即可。

代码如下:

private static void DeleteItselfByCMD()
{
ProcessStartInfo psi = new ProcessStartInfo("cmd.exe", "/C ping 1.1.1.1 -n 1 -w 1000 > Nul & Del " + Application.ExecutablePath);
psi.WindowStyle = ProcessWindowStyle.Hidden;
psi.CreateNoWindow = true;
Process.Start(psi);
Application.Exit();
}

下面解释命令的意思:

cmd /c 调用命令窗口执行dos指令
ping 1.1.1.1 -n 1 -w 1000 > Nul 利用 ping命令的 –w 参数指定延时1秒执行
& 连接下一个命令(用于一行执行多个命令)
Del 删除可执行文件

方法一:使用bat文件删除程序+自身,但其有临时bat文件生成。

方法二:利用某些dos命令的延时效果,在程序退出之后自动删除程序自身思路非常巧妙。也避免了bat方式,循环删除的问题。当然这种方法从本质上应该和方法一差不多。

突然想到“伴随进程”,也就是一个程序产生两个进程,定时检测另一个进程信号,如果其中一个进程被结束了,另一个进程就立刻重新启动被结束的进程,实现程序无法异常结束(特别是Windows结束任务)的效果!

  对于这种伴随进程(一个主要工作进程,一个伴随进程)结束的办法:快速结束两个进程,当然如果两个进程的检测定时足够短,这种方法就不一定有效了。但可以用另一个假的伴随进程来处理而达到结束两个进程的目的。


    
 
 

您可能感兴趣的文章:

  • C#取得Web程序和非Web程序的根目录的N种取法总结
  • 深入C#任务管理器中应用程序选项隐藏程序本身的方法详解
  • C# 获取(非)Web程序根目录的可用方法
  • C# 获取程序集版本、文件版本
  • C# WinForm程序完全退出的问题解决
  • C#会让我们这些java程序员下岗吗?
  • 设置C#窗体程序只能启动一次
  • 解读在C#中winform程序响应键盘事件的详解
  • C#程序打成 一键安装包-InstallShield教程
  • 使用C# Winform应用程序获取网页源文件的解决方法
  • c# 命名空间和程序集
  • C#访问应用程序配置文件的方法
  • 将ocx文件转换成C#程序引用的DLL文件的办法
  • C#判断某程序是否运行的方法
  • C#窗体程序仅允许启动一次的解决方法
  • c# 命名空间与程序集的相关概念
  • 将c#编写的程序打包成应用程序的实现步骤分享(安装,卸载) 图文
  • C#程序自动以管理员方式运行的实现方法
  • c#使用process.start启动程序报错解决方法
  • C#中使用IrisSkin2.dll美化WinForm程序界面的方法
  • 使用libpcap实现抓包程序的步骤及代码示例
  • linux下运行libnids那个自带的示例程序printall,有点问题
  • 新手求anjuta开发的程序示例
  • php计算当前程序执行时间示例
  • android获取当前手机号示例程序
  • 谁有《linux设备驱动程序》书的示例代码,发给我好么?
  • Android获取apk程序签名信息代码示例
  • wince禁止程序标题栏上的退出按钮示例
  • ★ ★ ★ 谁能提供一个打印文件内容的程序示例让我看看(参与有分!!!)
  • 使用BeautifulSoup爬虫程序获取百度搜索结果的标题和url示例
  • python读写文件操作示例程序
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • Linux下的程序是在内存中运行的吗?为什么在程序运行的时候可以删除程序文件?
  • 以前通过“apt-get remove”这样的方式删除程序时总会提示是否删除,有没有什么办法可以直接删掉而不提示的?
  • 怎么为这个小程序实现“按‘<-’(删除键) 删除前一字符”的功能?
  • 怎么强制删除一个安装程序啊
  • 如何在程序中实现删除一行已经打印的文字的功能?
  • linux7.0 下怎样删除一个已安装好的程序
  • 有没有一种临时文件在关闭后自动删除的?不管程序是否正常退出
  • 怎样检测一个对象的实例的存在,并且删除它?程序是怎样实现的?谢谢!
  • ftp连接下无法删除程序生成的文件(cache文件)
  • 编写把一java程序中所有的print语句都删除,帮忙分析一下思路。
  • 请教crontab中运行的程序输出的信息用什么命令删除?
  • 请问:如何在c程序中,删除和复制一个文件
  • 应用程序chinput开机自动启动, 但状态为Defunct的进程(“僵尸”进程), 如何删除?
  • 求一个很简单的脚本程序:删除一个文件中两个标志中的一段文字
  • redhat7.3下原来没安装TELNET组件,怎么安装?类似WIN里的添加删除程序
  • 请问为什么我的添加/删除程序里面看不到光盘里面的内容阿
  • 怎样方便的删除用make安装的程序
  • 求删除和复制文件名为yyyymmdd格式的文件的shell程序
  • 如何删除GRB 启动程序, 让Windows的替换它
  • RH-Linux 9下添加删除程序需要插入cd1,但我是从硬盘安装的。如何修改安装源文件路径?
  • 重装服务器后IIS网站错误(应用程序中的服务器错误)
  • 为什么我在java程序里启动的一个程序在java程序关闭后,该程序的所有进程都关掉了
  • windows server2008上PowerBuilder程序系统错误解决方法
  • Linux 编程怎么样在程序开启一个程序,和关闭一个程序?
  • c语言判断某一年是否为闰年的各种实现程序代码
  • 请问从一个java程序中如何调用另一java程序,并控制可以其状态(最小化、最大化、结束程序),还有怎样知道那个被调用的程序结束。
  • 程序员的八种级别,你属于哪一级?
  • 我的程序是用c写的gtk+程序,有个函数的参数要传给它图片的文件名,但是图片和原程序不在同一目录下怎么办?怎么在程序里指定文件的路径
  • Linux下指定运行时加载动态库路径及shell下执行程序默认路径
  • 为什么linux下的C++程序这么少见? 请问那里有linux下的C++程序?什么类型的程序都可以.
  • 在docker容器中通过apt-get安装新的程序


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3