程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> c#法式刪除本身代碼示例分享

c#法式刪除本身代碼示例分享

編輯:C#入門知識

c#法式刪除本身代碼示例分享。本站提示廣大學習愛好者:(c#法式刪除本身代碼示例分享)文章只能為提供參考,不一定能成為您想要的結果。以下是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停止義務)的後果!

  關於這類隨同過程(一個重要任務過程,一個隨同過程)停止的方法:疾速停止兩個過程,固然假如兩個過程的檢測准時足夠短,這類辦法就紛歧定有用了。但可以用另外一個假的隨同過程來處置而到達停止兩個過程的目標。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved