注册 登录
编程论坛 VC++/MFC

可执行文件的打包

gzy541 发布于 2012-02-23 14:53, 1099 次点击
我想把几个.exe文件打包成一个安装文件,请问如何打包?(用VC)
谢谢了!
8 回复
#2
yuccn2012-02-23 15:52
有专门的工具的,你百度找下就行了。
#3
gzy5412012-02-23 16:16
我想用VC做,目前是把exe文件当资源文件导入到打包程序中,但不知道怎么运行。
还是谢谢你了。
#4
yuccn2012-02-23 16:21
这样啊,
用下面几个函数可以,你查查看吧
BeginUpdateResource(……)
UpdateResource(……)
EndUpdateResource(……)

查询msdn就行了
#5
gzy5412012-02-23 16:23
我想用VC做,目前是把exe文件当资源文件导入到打包程序中,但不知道怎么运行。
还是谢谢
#6
gzy5412012-02-23 16:23
我试试,谢谢啊!
#7
yuccn2012-02-23 18:05
BeginUpdateResource(……)
UpdateResource(……)
EndUpdateResource(……)

只是把一些数据打到一个pe文件的里面作为资源而已的,打进去的数据不会被运行的(对程序来说,打进去的只是一个2进制数据)。如果要这些数据被运行,还是要把这些资源释放出来还原成pe文件才可以运行的。
如果要把它释放,应该
FindResource()找到资源 ::SizeofResource()获取资源的大小,-》::LoadResourc()-》LPVOID lpResData = ::LockResource(hResData);
-》把lpResData 的数据写到一个文件里面去就行了。写入的大小为前面的SizeofResource 。

下面是我写过的一个程序 动作就是释放资源包
,看看对你是否有价值
BOOL GetBindResInfo(LPBYTE *lpResInfo, LPDWORD lpdwResSize)
{
    if (lpResInfo == NULL || lpdwResSize == 0) {
        return FALSE;
    }

    HRSRC hResInfo = ::FindResource(NULL, RES_NAME_BIND_INFO, RT_RCDATA);
    DWORD dwResSize = ::SizeofResource(NULL, hResInfo);
    if (dwResSize == 0) {
        return FALSE;
    }

    HGLOBAL hResData = ::LoadResource(NULL, hResInfo);
    LPVOID lpResData = ::LockResource(hResData);

    LPBYTE lpResBuffer = new BYTE[dwResSize];
    ::memcpy(lpResBuffer, lpResData, dwResSize);

    (*lpResInfo) = lpResBuffer;
    (*lpdwResSize) = dwResSize;

    ::FreeResource(hResData);

    return TRUE;
}
#8
C_printf2012-02-23 18:53
如果文件不大的话,用16进制文件查看工具打开一个exe文件,然后把这些数据复制放到一个char数组,数组大小根据文件大小定义。几个exe就搞几个数组。
在要用这些exe的,就把数组里面的数据写成exe。
文件操作会吧。
#9
gzy5412012-02-24 09:30
谢谢帮忙,呵呵,到这里我就可以自己研究了,十分感谢!
1