1. 程式人生 > >如何簡單實現可執行檔案的自我刪除

如何簡單實現可執行檔案的自我刪除

可執行檔案即 EXE 檔案在執行過程中,由系統管理其開啟的控制代碼。此時對該檔案的一些操作是被系統禁止的,比如刪除操作。然而在某些場合,可能須要程式有自我刪除的功能,也就是程式執行結束後刪除自身。基於這個想法,可以有一種很簡單的方法來實現這個基本功能。

本方法基於兩點來實現刪除功能。一是利用 windows 的 command program 的刪除檔案操作;再者就是啟動新的程序來執行這個刪除操作。下面就仔細說明。

Windows 中的 command program 是一個系統的 shell program. 在 windows95/98/Me 中,其檔名為 command.com ,而在 NT/2000/XP 中則是 cmd.exe 。我們可以通過環境變數 COMSPEC 得到其全路徑名。

假定目前我們所使用的是 XP ,在命令列中輸入 :

cmd.exe /?

即得到 command shell 的使用方法;其中 /c 的含義是:執行字串指定的命令然後終斷,這正是我們所須要的。這樣利用 command shell 刪除一個檔案的命令如下:

cmd.exe /c del mypro.exe

這裡要注意一點,檔名應該是短檔名(檔名不得超過 8 個字元 , 字尾不超過 3 個字元)。如果實際檔案是長檔案句,那麼程式中我們可以用 GetShortPathName 這個 API 函式來轉換。

接下來我們要做是如何在一新的程序中成功的執行這一指令。起來一個新程序的命令主要有 ShellExecute 和CreateProcess 。

先使用 ShellExecute 為例。在程式的結束處使用如下語句:

ShellExecute(NULL, "open","cmd.exe", "/c del mypro.exe ", NULL, SW_HIDE);

編譯後執行檔案發現執行成功,檔案執行完後被刪除。但是後面做多次實驗後,發現有時檔案執行完後並不會被刪除。通過分析,認為在刪除操作執行時,可執行檔案還未關閉。也就是說只有在執行檔案的程序關閉後,執行刪除操作的程序才能完成操作。這樣就有了一個問題,系統負責程序和執行緒的排程執行,我們無法人為規定程序或執行緒以某種秩序執行。

對此我的解決辦法是,建立執行刪除操作的程序時設定其為掛起狀態,從而為其的設定一個低優先級別,同時提高執行檔案的程序級別,然後才正式起動新程序。這樣基本可以保證兩個程序的先後執行。這樣新的解決方法就是用CreateProcess以CREATE_SUSPEND標誌來建立新程序,然後用SetPriorityClass來設定相應的優先順序,主程序的優先順序是HIGH_PRIORITY_CLASS,而執行刪除操作的程序的優先順序是IDLE_PRIORITY_CLASS。經過數百次的測試,刪除操作都是成功的。

下面是一個封裝了刪除操作的函式,函式內起動一個程序執行command shell的del命令。在程式最後結束處呼叫它,就可以簡單的實現程式的自刪除功能。

01.include < windows.h> 02.#include < shellapi.h> 03.#include < stdio.h> 04. 05.int DeleteMyExe() 06.{ 07.TCHAR tcsExename[MAX_PATH]; 08.TCHAR tcsParam[MAX_PATH * 2]; 09.TCHAR tcsCmd[MAX_PATH]; 10.HANDLE hProcess = NULL; 11. 12.// get exe filename and command shell program 13.if( 0 == GetModuleFileName(NULL, tcsExename, MAX_PATH) 14.||  0 == GetEnvironmentVariable(_T("COMSPEC"), tcsCmd, MAX_PATH)) 15.FAILRET; 16. 17.// get short filename for command shell program 18.if( 0 == GetShortPathName(tcsExename, tcsExename, MAX_PATH)) 19.FAILRET; 20. 21.// create a command process, set its priority, then start it. 22.STARTUPINFO si; 23.

相關推薦

如何簡單實現執行檔案自我刪除

可執行檔案即 EXE 檔案在執行過程中,由系統管理其開啟的控制代碼。此時對該檔案的一些操作是被系統禁止的,比如刪除操作。然而在某些場合,可能須要程式有自我刪除的功能,也就是程式執行結束後刪除自身。基於這個想法,可以有一種很簡單的方法來實現這個基本功能。 本方法基

利用certutil.exe實現在批處理(bat)中嵌入執行檔案或者各種媒體、圖片之類二進位制檔案簡單方法

實際上利用certutil.exe 把二進位制檔案(包括各種檔案,exe可執行程式,圖片,聲音,mp3) 經過base64編碼為文字,可以實現把這些檔案嵌入到批處理程式碼中。 有什麼用?: 舉個例子,批處理經常需要依賴其它命令列工具實現自動化指令碼,如果把這

上傳檔案的jar包 + 簡單執行 jar 檔案包製作

最近公司ftp 上傳有點問題,老是會出錯,為了保證上傳的準確性(有時候釋出版本需要先上傳ftp),特意做了一個上傳的jar demo。 基本邏輯:  上傳檔案  並記錄檔名, 之後下載剛才上傳的檔案, 對比上傳和下載的MD5值, 之後刪除本地下載的臨時檔案。

在一個Android專案裡面有兩個執行檔案,如何實現呼叫方式

我的處理方式是: 用Intent+AndroidManifest.xml的方法: 此方法是用Intent和修改AndroidManifest.xml達成的。 就是在要引用的AndroidManifest.xml檔案裡面加入被引用那個專案的activity: <activity

強悍!winrar妙用-將bat指令碼打包成exe執行檔案實現自動執行

轉自:https://blog.csdn.net/qq_35440678/article/details/53264410   一、背景介紹 最近有個這樣的需求,為了網頁解決IE相容問題,需實現自動檢測到使用IE開啟時下載一個離線chrome安裝包,用一個bat指令碼啟動離線的

002-【最簡單】Electron 怎麼將網頁打包成桌面應用(web前端頁面怎麼生成exe執行檔案

在 HTML5的崛起、JavaScript要一統天下之際,有一個名為【跨平臺】的技術越來越火。為什麼會這麼火?因為軟體開發者

【最簡單】Electron 怎麼將網頁打包成桌面應用(web前端頁面怎麼生成exe執行檔案

在 HTML5的崛起、JavaScript要一統天下之際,有一個名為【跨平臺】的技術越來越火。為什麼會這麼火?因為軟體開發者只需一次編寫程式,即可在 Windows、Linux、Mac、IOS、

springboot採用Docker容器化,實現執行jar檔案編譯成映象以及映象的釋出

作者:ydw_武漢聯絡方式:[email protected]前言:Docker是一個linux的容器管理工具,在現在的架構中,使用非常普遍,它允許使用者把容器映象推送到一個公共的庫或者是私有的映象庫中,使用也方便,對於之前專案的部署為了部署環境的統一也很麻煩,現在

makefile簡單編寫-生成執行檔案

makefile 要想把寫好的程式放到linux下編譯,必不可少的要使用到makefile檔案。makefile帶來的好處就是——“自動化編譯”,一旦寫好,只需要一個make命令,整個工程完全自動編譯,極大的提高了軟體開發的效率。下面講下makefile簡單的

java語言程式設計實現開啟exe執行檔案以及txt,word等檔案功能

java語言程式設計實現,開啟exe可執行檔案及txt、word等檔案功能,程式碼如下: public class OpenSpecialFile{ public static void mai

執行檔案簡單打包成rpm檔案

操作環境:CentOS_6.7-Minimal 首先安裝rpm環境: yum install rpm-build yum install rpm-devel yum install rpmdevtools 生成rpm執行環境: rpmdev-setu

VC++ 實現增大執行檔案的體積 自定義檔案大小

做免殺的同學可能都會吧,增大檔案體積防止雲上傳是個不錯的方法 功能介面: 選擇檔案,是對話方塊支援檔案拖放(詳情見:http://blog.csdn.net/eldn__/article/details/8394060) 為對話方塊新增成員變數:CString m_

執行檔案的裝載與程序的一點小總結 《程式設計師的自我修養》·筆記

可執行檔案的裝載與程序小結 程序的虛擬地址空間   每個程式被執行起來之後都擁有自己獨立的虛擬地址空間,這個虛擬地址空間的大小是CPU的位數決定的。比如,32位的硬體平臺決定了虛擬地址空間的地址為

android 編寫簡單執行檔案

使用Android sdk 原始碼編譯一個簡單的adb shell 命令下的可執行檔案: 在system/core  下建立一個臨時資料夾tmp,並建立了Android.mk 和 test.c

VC實現檔案自我刪除

#include <afx.h>//需要使用mfc庫 #include <sys/stat.h> //加入狀態顯示標頭檔案. #include <ShellAPI.h> #include <Shlobj.h> BOO

基於Python3.6寫的自助翻譯小軟體--使用google translate的介面,Python實現爬取google翻譯API結果,並打包成.exe的執行檔案

看文獻看的頭疼,為了解決小麻煩沒事就寫了這個來玩一玩。其實也沒有什麼就是用一個簡單的爬蟲和介面,所以啥也不多說,直接貼程式碼,歡迎嘗試# -*- coding: utf-8 -*- # filename:GoogleTranslation1.2.py import urll

將Matlab的M檔案轉為P檔案和exe執行檔案達到加密效果

在matlab中如果你的程式碼很重要,需要加密,目前我查到了兩種方法:一、生成p檔案;二、生成.exe檔案 matlab生成p檔案的方法很簡單,在command wondow裡面用 pcode yourfile.m 命令可以將M檔案轉化為對應的pcode檔案yourfile.p,據說是不會被反編

經驗總結---編譯出可以在Android上執行執行檔案

作為一手包攬Ubuntu和Android裝置的初級開發者,我不止一次地嘗試把這兩個同是用Linux核心的作業系統統一起來——讓Ubuntu下的可執行程式能夠在Android裝置上執行。於是我不止一次地嘗試,不止一次地查詢資料,終於如願以償。 我把我的經驗在這裡與大家分享。 準備工具 【宿

將Maven工程匯出war包(匯出執行檔案) war包的安裝與部署(以兩個Tomcat為例,詳細)請到:

1  開啟war工程的pom.xml,將如下內容複製到配置Tomcat的程式碼中                 &l

Makefile 編譯生成多個執行檔案

all:server client server:server.c gcc $< -o [email protected] client:client.c gcc $< -o [email protected] clean:   &nb