最初是按照 FILE_FLAG_DELETE_ON_CLOSE的线索做的实验, 后来发现原始exe可以删除,但是克隆exe删不掉.
原因是进程在运行, 无法被删除.
后来在codeproject上看到释放.bat文件来删除主程序的方法. 这个方法实现, 思路明了. 实验的效果也不错.
Console工程:
包含console, dialog, sdi, mdi自删除工程的下载点:
http://download.csdn.net/source/3012716
<2012_0617>
在Unicode字符集下编译不过, 找到UUID的新实现.
original url from : http://www.dotblogs.com.tw/larrynung/archive/2011/10/13/42376.aspx
{
_TUCHAR *guidStr = NULL;
std::wstring strW;
GUID *pguid = new GUID;
CoCreateGuid(pguid);
// Convert the GUID to a string
UuidToString(pguid, (RPC_WSTR*)&guidStr);
delete pguid;
strW = std::wstring(guidStr);
return strW.c_str();
}
修正后的GenerateUniquePrefixName()实现
{
CString strUnique;
GUID guid;
HRESULT hRc = CoCreateGuid(&guid);
if(S_OK != hRc)
{
strUnique.Format(_T("%d"), rand());
}
else
{
_TUCHAR * str = NULL;
UuidToString(&guid, (RPC_WSTR*)&str);
strUnique = str;
RpcStringFree((RPC_WSTR*)str);
}
return strUnique;
}
现在用CString感觉很别扭了~