请教从资源中启动EXE的方法,以前的做法没有安全性.

dongchaomissyou 2007-04-02 03:17:40
我现在写的软件里有个证书生成器,这个文件是做为主程序的资源被加载在程序里的.当需要调用时自动把这个生成器写到某个目录下,然后运行. 但现在出于安全角度考虑,不允许这个生成器文件写到本地磁盘. 请教各位如何实现.

下面是老的做法
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);
...全文
231 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
dongchaomissyou 2007-04-07
  • 打赏
  • 举报
回复
Up
dongchaomissyou 2007-04-05
  • 打赏
  • 举报
回复
Up
dongchaomissyou 2007-04-04
  • 打赏
  • 举报
回复
关键就是证书不是我们写的,没有代码,他们只提供了导出接口
Yofoo 2007-04-04
  • 打赏
  • 举报
回复
启动程序 需要exe文件, RAM disk可能比较复杂
建议还是把证书生成器的代码加到 当前工程
angel_rabbit 2007-04-03
  • 打赏
  • 举报
回复
mark.
蒋晟 2007-04-02
  • 打赏
  • 举报
回复
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.

2,640

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 硬件/系统
社区管理员
  • 硬件/系统社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧