读书人

请问从资源中启动EXE的方法,以前的做法

发布时间: 2012-01-28 22:06:13 作者: rapoo

请教从资源中启动EXE的方法,以前的做法没有安全性.
我现在写的软件里有个证书生成器,这个文件是做为主程序的资源被加载在程序里的.当需要调用时自动把这个生成器写到某个目录下,然后运行. 但现在出于安全角度考虑,不允许这个生成器文件写到本地磁盘. 请教各位如何实现.

下面是老的做法
CString strFile;
strFile = _T( "C:\\Certificate.exe ");

HINSTANCE HInstance = AfxGetInstanceHandle();
HRSRC hResInfo;
HGLOBAL hRes;

//寻找资源名
hResInfo = FindResource(HInstance,(LPCSTR)(IDR_EXE_SERVER), "EXE ");
hRes = LoadResource(HInstance,hResInfo ); // Load it
DWORD dFileLength = SizeofResource( HInstance, hResInfo ); //计算EXE文件大小

CFile file;
if(file.Open( strFile, CFile::modeCreate | CFile::modeWrite, NULL))
{
file.WriteHuge((LPSTR)hRes,dFileLength); //写入临时文件
file.Close();

if(IsFileExist(strFile))
{
// 启动程序
ShellExecute(NULL, "open ",strFile,NULL, NULL, SW_HIDE);
}
}

FreeResource(hRes);


[解决办法]
You can load a DLL from memory, but you need to adjsut base memory addresses by yourself
http://msdn.microsoft.com/msdnmag/issues/02/02/PE/PE.asp
http://msdn.microsoft.com/msdnmag/issues/02/03/PE2/PE2.asp
Another method is to create a RAM disk.
[解决办法]
mark.
[解决办法]
启动程序 需要exe文件, RAM disk可能比较复杂
建议还是把证书生成器的代码加到 当前工程

读书人网 >VC/MFC

热点推荐