zoukankan      html  css  js  c++  java
  • 把外部文件写入自己的EXE文件中

    制作安装包时,涉及的技术包括安装位置设定、目录创建、相关文件的拷贝、数据库初始化、相关文件的注册、打包成单一文件及其它初始化等,一般我们都喜欢把这些复杂的工作交给专业打包工具如InstallShield等来处理。但只要善于整理,不借助专业打包工具,仅使用VC自己打包也很可行。

    使用VC打包的难点在于把所有文件打包成单一文件,本文将使用一示例主要解决此问题。

    1. 在VC工程中,导入其它文件(这里使用exe格式的可执行文件),Resource Type使用EXE,资源名:IDR_EXE1;
    2. 对话框工程中添加函数如下:
    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文件可以读取或者复印其本身,利用此原理便可制作自解压软件,当然也可以更好的制作安装包。

  • 相关阅读:
    Stm32高级定时器(三)
    Stm32高级定时器(二)
    Java网络编程
    Java锁详解
    Linux Shell入门
    Mysql锁详解
    Redis入门——Java接口
    Redis入门——安装与基本命令
    Eclipse创建maven工程后没有build path解决方案
    Jersey入门——对Json的支持
  • 原文地址:https://www.cnblogs.com/Roarsun/p/2831205.html
Copyright © 2011-2022 走看看