日期:2014-05-20  浏览次数:20789 次

C#程序如何实现自删除?
说说思路吧~

搜的资料貌似多是VC   DEPHI的。。。

------解决方案--------------------
一般都是写一个BAT文件然后退出运行BAT,因为程序在自己运行的时候是不能删除本身的

------解决方案--------------------
我以前试过直接可以删除的,直接可以删除的吧,你试了没有?

------解决方案--------------------
运行到途中基本不可能删除自己吧
我这有一份VC的代码 大家可以参考一下思路
虽然是VC的 用C#实现应该差别不会太大
以前试过可以直接删除的应该是纯属扯淡 :P
这份代码的原作者是vcbear

#include <windows.h>
#include <stdlib.h>
#include <tchar.h>

int WINAPI WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpszCmdLine,int nCmdShow)
{
if(__argc == 1){
TCHAR szPathOrig[_MAX_PATH], szPathClone[_MAX_PATH];
GetModuleFileName(NULL, szPathOrig, _MAX_PATH);
GetTempPath(_MAX_PATH, szPathClone);
GetTempFileName(szPathClone, __TEXT( "Del "), 0, szPathClone);
CopyFile(szPathOrig, szPathClone, FALSE);
HANDLE hfile = CreateFile(szPathClone, 0, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_FLAG_DELETE_ON_CLOSE, NULL);
TCHAR szCmdLine[512];
HANDLE hProcessOrig = OpenProcess(SYNCHRONIZE, TRUE, GetCurrentProcessId());
wsprintf(szCmdLine, __TEXT( "%s %d \ "%s\ " "), szPathClone, hProcessOrig, szPathOrig);
STARTUPINFO si;
ZeroMemory(&si, sizeof(si));
si.cb = sizeof(si);
PROCESS_INFORMATION pi;
CreateProcess(NULL, szCmdLine, NULL, NULL, TRUE, 0, NULL, NULL, &si, &pi);
CloseHandle(hProcessOrig);
CloseHandle(hfile);
}
else{
HANDLE hProcessOrig = (HANDLE) _ttoi(__targv[1]);
WaitForSingleObject(hProcessOrig, INFINITE);
CloseHandle(hProcessOrig);
DeleteFile(__targv[2]);
}
return 0;
}