c#程序删除自身代码示例分享
在.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(
":del\r\n" +
" del \"{0}\"\r\n" +
"if exist \"{0}\" goto del\r\n" +
"del %0\r\n", 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 <Application.ExecutablePath> 删除可执行文件
方法一:使用bat文件删除程序+自身,但其有临时bat文件生成。
方法二:利用某些dos命令的延时效果,在程序退出之后自动删除程序自身思路非常巧妙。也避免了bat方式,循环删除的问题。当然这种方法从本质上应该和方法一差不多。
突然想到“伴随进程”,也就是一个程序产生两个进程,定时检测另一个进程信号,如果其中一个进程被结束了,另一个进程就立刻重新启动被结束的进程,实现程序无法异常结束(特别是Windows结束任务)的效果!
对于这种伴随进程(一个主要工作进程,一个伴随进程)结束的办法:快速结束两个进程,当然如果两个进程的检测定时足够短,这种方法就不一定有效了。但可以用另一个假的伴随进程来处理而达到结束两个进程的目的。
相关推荐
-
c#删除代码中的单行注释行示例
复制代码 代码如下: using System.IO; using System.Collections; static string deleteComments(string s) //去掉以//开始的注释 { if (s == null) return s; int pos = s.IndexOf("//"); if (pos < 0) return s; return s.Substring(0, pos); }if (Directory.Exists("Tem
-
C#删除字符串中重复字符的方法
本文实例讲述了C#删除字符串中重复字符的方法.分享给大家供大家参考.具体实现方法如下: 复制代码 代码如下: #region 删除重复字符 string s = "sdfffffsrlkjesgljfdg03940864e5=_0R9DTGR98YUI\\|||'\\???fdf///"; Response.Write("<br/>String:" + s + "<br/>Result:"); IEnumerable
-
C#中DataTable删除行的方法分析
本文实例讲述了C#中DataTable删除行的方法,分享给大家供大家参考之用.具体实现方法如下: 自己的删除例子(drTemp是表,gvSummary是dev 的gridview.单击右键点击grid删除): 1.dtTemp.Rows.RemoveAt(gvSummary.FocusedRowHandle); 2.dtTemp.Rows[gvSummary.FocusedRowHandle].Delete(); dtTemp.AcceptChanges(); 在C#中,如果要删除DataTa
-
C#删除最后一个结尾逗号的方法
本文实例讲述了C#删除最后一个结尾逗号的方法.分享给大家供大家参考.具体实现方法如下: C#开发过程中经常会用逗号将数组或者列表中的字符串进行连接,这样往往最后会多一个逗号,这个函数用于去除最后的那个逗号,很简单. /// <summary> /// 删除最后结尾的一个逗号 /// </summary> public static string DelLastComma(string str) { return str.Substring(0, str.LastIndexOf(&q
-
C#遍历List并删除某个元素的方法
本文实例分析了C#遍历List并删除某个元素的方法.分享给大家供大家参考.具体如下: 1.我们选择用for循环: for(int i=0;i<list.count;i++) { if(list[i]) { list.RemoveAt(i); } } 如果这样循环,肯定不对, {A B C D E F G H} 假设当前遍历到D(i=3),移除,接着遍历i=4(F), 此时跳过了E(i=3) 2.我们使用倒序遍历,这个问题就解决了 for(int i=list.Count-1;i>=0;i--
-
C#实现彻底删除文件的方法
本文实例讲述了C#实现彻底删除文件的方法.分享给大家供大家参考.具体实现方法如下: 经常用360的文件粉碎,删除隐私文件貌似还不错的.不过C#也可以实现彻底删除文件.试了下用360文件恢复恢复不了源文件了. 主要代码如下: 复制代码 代码如下: public class AbsoluteFile { public event EventHandler FinishDeleteFileEvent = null; public event EventHandler
-
c#数据绑定之删除datatable数据示例
c#数据绑定之将datatabel的data添加listView中,简要的通过代码应用了DataTable,DataTableColumns,DataTableRow类,通过UI界面的Textbox向DataTable中添加数据然后响应到ListView控件中.在本实例中主要针对如何删除DataTable的纪录,并同步到ListView中. 首先,对UI做一些改动,最终界面如下图所示.主要是在ListView 中添加了CheckBox控件. 在ListView中添加CheckBox 的XAML
-
C#下实现创建和删除目录的实例代码
本文所述代码是从一个C#程序中摘录出来的,主要实现C#创建目录.删除文件夹及文件的功能,包括所引用的名称空间等,特别是对C#不熟悉的初学者,会有一定的参考借鉴价值.下面把创建和删除文件夹的完整代码帖上来供大家参考借鉴. 代码入下所示: using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.IO; using System.Collections; nam
-
c#程序删除自身代码示例分享
在.NET程序中,因为运行中的程序是受系统保护的,不能自己删除自身的,所以自删除的思路: 在关闭本程序之前启动新的进程打开另一个程序,调用这个程序来删除原程序.然后再完成外部进程的销毁. 方法一:程序中打开新的进程,删掉程序后,再销毁进程本身 流程:首先生成一个BAT文件,然后让BAT执行删除动作,就是:1.生成删除的BAT2.运行BAT3.快速退出4.BAT开始删除EXE5.BAT删除BAT 复制代码 代码如下: private static void DeleteItself(){strin
-
Windows系统中C#读写ini配置文件的程序代码示例分享
最近接触到INI配置文件的读写,虽然很久以前微软就推荐使用注册表来代替INI配置文件,现在在Visual Studio上也有专门的.Net配置文件格式,但是看来看去还是INI配置文件顺眼.事实上.Net的XML格式配置文件在功能上更加强大,我也更推荐大家使用这种类型的配置文件来进行.Net软件的开发,我之所以使用INI配置文件,无非是想尝一下鲜和个人习惯而已. C#本身没有提供访问INI配置文件的方法,但是我们可以使用WinAPI提供的方法来处理INI文件的读写,代码很简单!网上有大量现成的代码
-
使用Python的Twisted框架编写非阻塞程序的代码示例
先来看一段代码: # ~*~ Twisted - A Python tale ~*~ from time import sleep # Hello, I'm a developer and I mainly setup Wordpress. def install_wordpress(customer): # Our hosting company Threads Ltd. is bad. I start installation and... print "Start installation
-
python使用PyV8执行javascript代码示例分享
安装相应的库,我使用的是PyV8 需要注意的是里面写的function函数需要用()括起来 复制代码 代码如下: import PyV8 class Test(): def js(self): ctxt = PyV8.JSContext() ctxt.enter() func = ctxt.eval('''(function(){return '###'})''') print func() print '213' if __name__ == '__main__': crawler = Tes
-
JavaScript实现图片滑动切换的代码示例分享
假设我们这里有1到5五张bmp图片,那么控制图片切换显示的核心代码可以为: <script> var i=1; var img = new Array(); img[0] = "1.bmp"; img[1] = "2.bmp"; img[2] = "3.bmp"; img[3] = "4.bmp"; img[4] = "5.bmp"; function playImg(){ i=i+1; var
-
c#测试本机sql运算速度的代码示例分享
复制代码 代码如下: using System;using System.Collections.Generic;using System.Text;using System.Data.SqlClient; namespace ConsoleApplication2{ class Program { static void Main(string[] args) { SqlConnection conn = new SqlConnec
-
C#连接mariadb(MYSQL分支)代码示例分享
首先配置好你的MariaDb,创建test数据库,在test里创建MyTable表,脚本如下(通过HeidiSQL导出的脚本): 复制代码 代码如下: -- ---------------------------------------------------------- 主机: 172.16.40.153-- 服务器版本: 5.5.5-10.0.4-MariaDB-1~wheezy-log -
-
用C#写的ADSL拨号程序的代码示例
<!--StartFragment-->ADSL自动拨号类,前提是在系统中已经有了一个宽带拨号连接 调用代码: RASDisplay ras = new RASDisplay(); ras.Disconnect();//断线 ras.Connect("adsl");//拨号 复制代码 代码如下: using System; using System.Runtime.InteropServices; public struct RASCONN { public
-
说明Java的传递与回调机制的代码示例分享
java传值还是传引用 1.原始类型参数传递 public void badSwap(int var1, int var2) { int temp = var1; var1 = var2; var2 = temp; } 2.引用类型参数传递 public void tricky(Point arg1, Point arg2) { arg1.x = 100; arg1.y = 100; Point temp = arg1; arg1 = arg2; arg2 = temp; } public st
-
android计算器代码示例分享
复制代码 代码如下: <?xml version="1.0" encoding="utf-8"?><EditText android:id="@+id/editText1" android:layout_width="match_parent" android:layout_height="wrap_content" android:ems="10&quo
随机推荐
- Android用于校验集合参数的小封装示例
- Ubuntu上配置Ruby on Rails框架及RubyMine IDE开发环境
- 用javascript实现代替marquee的滚动字幕效果代码
- vue.js入门教程之计算属性
- Java编程实现非对称加密的方法详解
- Symfony数据校验方法实例分析
- 详解Java设计模式编程中的里氏替换原则
- C# 实例化接口对象的方法
- IIS下配置Php+Mysql+zend的图文教程
- jQuery实现简易的天天爱消除小游戏
- 详解Nginx日志配置及日志切割
- 详解MySQL中SlowLog的配置方法(图文)
- 三种检测iPhone/iPad设备方向的方法
- react.js 翻页插件实例代码
- Spring中WebDataBinder使用详解
- Table隔行变色的JavaScript代码
- 常用电脑族如何防止电脑辐射
- 基于ajax后台返回的数据为空前台显示出现undefined的解决方法
- vue 弹窗时 监听手机返回键关闭弹窗功能(页面不跳转)
- jQuery zTree树插件的使用教程