请问从资源中启动EXE的方法,以前的做法没有安全性
请教从资源中启动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可能比较复杂
建议还是把证书生成器的代码加到 当前工程
我现在写的软件里有个证书生成器,这个文件是做为主程序的资源被加载在程序里的.当需要调用时自动把这个生成器写到某个目录下,然后运行. 但现在出于安全角度考虑,不允许这个生成器文件写到本地磁盘. 请教各位如何实现.
下面是老的做法
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可能比较复杂
建议还是把证书生成器的代码加到 当前工程