制作安装包时,涉及的技术包括安装位置设定、目录创建、相关文件的拷贝、数据库初始化、相关文件的注册、打包成单一文件及其它初始化等,一般我们都喜欢把这些复杂的工作交给专业打包工具如InstallShield等来处理。但只要善于整理,不借助专业打包工具,仅使用VC自己打包也很可行。
使用VC打包的难点在于把所有文件打包成单一文件,本文将使用一示例主要解决此问题。
- 在VC工程中,导入其它文件(这里使用exe格式的可执行文件),Resource Type使用EXE,资源名:IDR_EXE1;
- 对话框工程中添加函数如下:
BOOL
CMyDlg::ReleaseRes(CString strFileName,
WORD
wResID, CString strFileType)
{
DWORD
dwWrite = 0;
//资源文件大小
HANDLE
hFile = CreateFile(strFileName, GENERIC_WRITE, FILE_SHARE_WRITE, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
//创建文件
if
(hFile == INVALID_HANDLE_VALUE)
return
FALSE;
HRSRC
hSrc = FindResource(NULL, MAKEINTRESOURCE(wResID), strFileType);
//查找资源文件,加载资源到内存,得到资源文件大小
HGLOBAL
hG = LoadResource(NULL, hSrc);
DWORD
dwSize = SizeofResource(NULL, hSrc);
WriteFile(hFile, hG, dwSize, &dwWrite, NULL);
//写入文件
CloseHandle(hFile);
return
TRUE;
}
|
3. 在需要的地方调用执行此函数即可:
ReleaseRes("Test.exe", DWORD(IDR_EXE1), "EXE");
另外还可以把其它文件写入指定exe文件结尾而不影响原exe文件运行,以及exe文件可以读取或者复印其本身,利用此原理便可制作自解压软件,当然也可以更好的制作安装包。