更新资源文件

Unity ScriptableObject 实例不随资源文件更新的解决方案 在 Unity ScriptableObject 的使用过程中,遇到了在 Unity 编辑器内 ScriptableObject 实例没有与资源文件同步更新的情况。经过一次又一次的尝试后,最终还是找到了一个可行的解决方案。 阅读详情

UpdateResource

DavidCrow,  7 Sep 2003
Rate this:  
How to manipulate raw resources (RT_RCDATA) using UpdateResource().

Introduction

Over the years, I've seen various flavors of the question "How do I include a file or data with my program that I can extract at run-time and do something with it?" For example, the asker might have had a .WAV file or a .MDB(MS Access) file that s/he wanted to include in the actual executable itself. For one reason or another, they do not want to package the two files separately. One advantage this has over a separate data/configuration file is that it'll never get lost. If the user decides they want to start fresh, they can remove everything but the application itself, and when the application is started up again, it extracts an empty database, all without the user knowing the behind-the-scenes details.

So thre are really two questions on the table here: "How to include the file?" and "Once the file is included, how to extract it and 'use' it?" Let's look at a simple example.

Including the file

In this example, I'll show the necessary code to take the entire Windows calculator (calc.exe) and add it as a resource to some test .EXE. The .EXE could just as easily be the application where these code snippets reside. The first thing we must do is open calc.exe in read-only mode, and read the entire file into a buffer.

HANDLE hFile;
DWORD dwFileSize,      
      dwBytesRead;
LPBYTE lpBuffer;

hFile = CreateFile(L"C:\\Winnt\\System32\\calc.exe", GENERIC_READ, 
                   0,
                   NULL,
                   OPEN_EXISTING,
                   FILE_ATTRIBUTE_NORMAL,
                   NULL);

if (INVALID_HANDLE_VALUE != hFile)
{
    dwFileSize = GetFileSize(hFile, NULL);

    lpBuffer = new BYTE[dwFileSize];

    if (ReadFile(hFile, lpBuffer, dwFileSize, &dwBytesRead, NULL) != FALSE)
    {
        // do something with lpBuffer here
    }

    delete [] lpBuffer;        
    
    CloseHandle(hFile);
}

Updating the resource data

Now it's simply a matter of getting access to the resource data of the test file and updating it with the data pointed to by lpBuffer. The third parameter to UpdateResource() is the name we want to give the resource. I just chose an arbitrary name of 104.

HANDLE hResource;

hResource = BeginUpdateResource(L"C:\\...\\t3.exe", FALSE);
if (NULL != hResource)
{
    if (UpdateResource(hResource, 
        RT_RCDATA, 
        MAKEINTRESOURCE(104), 
        MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), 
        (LPVOID) lpBuffer, 
        dwFileSize) != FALSE)
    {
        EndUpdateResource(hResource, FALSE);
    }
}

At this point, you can actually open the test file with Visual Studio and see the addition of our data in the "Data" section. Be sure to open the file as a "resource"!

Extracting the data

So now your application has been delivered, and you need to extract the resource data.

Extracting the resource data uses functions from the same family as UpdateResource(). The required steps are to load the file containing the resource data, find the desired resource, load the resource, and then lock it.

HMODULE hLibrary;
HRSRC hResource;
HGLOBAL hResourceLoaded;
LPBYTE lpBuffer;

hLibrary = LoadLibrary(L"C:\\...\\t3.exe");
if (NULL != hLibrary)
{
    hResource = FindResource(hLibrary, MAKEINTRESOURCE(104), RT_RCDATA);
    if (NULL != hResource)
    {
        hResourceLoaded = LoadResource(hLibrary, hResource);
        if (NULL != hResourceLoaded)        
        {
            lpBuffer = (LPBYTE) LockResource(hResourceLoaded);            
            if (NULL != lpBuffer)            
            {                
                // do something with lpBuffer here            
            }
        }    
    }

    FreeLibrary(hLibrary);
}

Saving the data to a file

All that's left is to create a file with the data pointed to by lpBuffer. Nothing special needs to be done to the data. It's the entire Windows calculator!

DWORD dwFileSize,
      dwBytesWritten;
HANDLE hFile;

dwFileSize = SizeofResource(hLibrary, hResource);

hFile = CreateFile(L"C:\\Winnt\\Temp\\calc2.exe",
                   GENERIC_WRITE,
                   0,
                   NULL,
                   CREATE_ALWAYS,
                   FILE_ATTRIBUTE_NORMAL,
                   NULL);

if (INVALID_HANDLE_VALUE != hFile)
{
    WriteFile(hFile, lpBuffer, dwFileSize, &dwBytesWritten, NULL);

    CloseHandle(hFile);
}

Now you should be able to run the newly created file, calc2.exe! As I indicated at the beginning of the article, this can be done with any sort of file that you want to include along with your main application or DLL.

License

This article has no explicit license attached to it but may contain usage terms in the article text or the download files themselves. If in doubt please contact the author via the discussion board below.

A list of licenses authors might use can be found here

Share

PyQt5实现远程更新exe可执行文件 1、获取远程http地址 2、获取需要更新的exe文件 3、点击更新 4、把exe强关闭 5、下载文件 6、更新 阅读详情

相关推荐

Linux 更新源文件

linux系统更新源文件,位于/etc/apt/sources.list ,包含kaili官方源,阿里源,中科大源,可以提高软件下载速度。

UpdateResource系列函数用法

最近用到了需要实时更新exe和dll中的资源文件,网上查了很多资料,做一些总结,方便下次使用。 UpdateResource这个函数主要用于添加、删除或者替换PE文件中的资源,它的原型为 BOOL WINAPI UpdateResource( _In_ HANDLE hUpdate, _In_ LPCTSTR lpType, _In_

liujun2458的专栏 5047

linux资源包

里面包含Linux的一些常用命令,同时附带了安装mysql数据库的教程

Linux系统APT更新源

5、运行sudo apt-get upgrade。4、运行sudo apt-get update。3、将原来的列表删除,添加如下内容。

weixin_69622946的博客 1965

黑金ZYNQ7010开发板开箱实测:从接线到串口通信的保姆级指南

本文提供黑金ZYNQ7010开发板从开箱到串口通信的完整实操指南。详细介绍了硬件连接、驱动安装、启动模式设置及串口终端配置等关键步骤,并针对常见问题提供排查思路,帮助FPGA开发者快速上手ZYNQ平台,建立稳定的调试通道。

weixin_29266749的博客 466

机器学习 -- 信用卡评分模型 -- 互联网金融风控

互联网金融主要分为资金类和资产类。资金类主要是理财产品,吸储,主要指标是用户转化、留存和复投,重在客户运营。资产类主要是贷款,包括消费金融和现金贷,小额贷款属于此类,主要目的是用户转化,还款和风险控制,信用卡评分模型就属于风险控制。 信用评分作用是对贷款申请人(信用卡申请人)做风险评估分值的方法。 信用卡评分是以大量数据的统计结果为基础,根据客户提供的资料和历史数据对客户的信用进行评估,评分卡模型...

XiaoMaEr66的博客 2418

UpdateResource(增加、删除或替代某可执行文件中的资源)

功能:该函数增加、删除或替代某可执行文件中的资源函数原型:[code]UpdateResource  hUpdate, lpType, lpName, wLanguage, lpData, cbData[/code]参数详解:[code]hUpdate   -> 由BeginUpdateResource函数创建的更新资源的句柄lpType    -> 指向说明将被更新的资源类型的字符串,它以NULL为终止符。类型详见备注lpName    -> 指向说明待被更新的资源名称的字符串,它以NULL为终止符。

天道酬勤 1万+

Field _II 仿真 学习笔记

参考Field II的使用说明,进行了四个例子的练习。仿真程序和结果如下: PURPOSE1:Calculate the received response from all elements of a linear array and plot the responses and the summed response 【计算来自所有线性阵元的接收响应,并绘制该响应以及叠加响应。】 >>

qq_34018578的博客 1万+

资源文件更新逻辑设计

1 资源文件更新 1.1 规则: 1.1.1 资源文件存在于三个位置:app内、更新目录内、更新服务器上。任何位置的资源文件,相对路径保持一致。 1.1.2 本地保存根路径:app-storage:// 1.1.3 单个文件版本控制:不做。每次需要更新时清除更新目录,重新下载全部可更新资源。 1.1.4 加载顺序:更新目录→app目录→更新服务器(即使更新到本地失败,该资源也应...

weixin_30389003的博客 203

单细胞转录组数据分析全流程:从原始数据到细胞注释

本文详细介绍了单细胞转录组数据分析的全流程,从原始数据读取、环境搭建、数据质控与标准化,到降维聚类、细胞类型注释,以及高级质控与多样本整合。重点阐述了如何利用Seurat等工具进行数据处理,并通过标志基因比对与自动注释方法完成细胞身份鉴定,为研究者提供了一套清晰、可操作的分析指南。

coffee的博客 551

旋转矩阵推导

推导前提: 坐标使用右手坐标系,角度逆时针旋转为正。 绕X轴旋转角度为 俯仰角 即Pitch 绕Y轴旋转角度为 偏航角 即Yaw(Head) 绕Z轴旋转角度为 翻滚角 即Roll 一、平面二维坐标点的旋转 如右图所示,根据三角函数关系,可以列出向量OP与OP’的坐标表示形式: x = |OP|•cosα x′ = |OP|•cos(α+β) y = |OP|•sinα y′ = |OP|•sin(α+β) 将P′(x′,y′)表达式展开: x′ =

suixinger_lmh的随笔 1384

Hive UDF使用资源文件及动态更新方案

文章目录Hive UDF使用资源文件及动态更新方案背景资源文件动态更新Hive UDF Jar 动态更新结束语 Hive UDF使用资源文件及动态更新方案 背景 注: 本文中的“函数”等同于UDF,默认情况下特指永久函数。 Hive 0.13版本开始支持自定义永久函数(Permanent Function),可以将函数注册到Hive Metastore,通过Hive/Beeline/Spark SQL可以直接引用,不需要类似于临时函数(Temporary Function) ,每次使用时均需要显式声明创建的

互联网从业者/大数据架构师/全栈开发者 1075

2026 AI Agent Harness Engineering 生态报告:开源工具链的现状与未来趋势

IEEE P2863-2025《通用人工智能自主代理技术架构与评估规范》于2025年11月正式发布,将AI Agent(通用人工智能自主代理)定义为:一种具备感知(Perception)、记忆(Memory)、推理(Reasoning)、规划(Planning)、行动(Action)五大核心能力闭环,能够在无显式指令覆盖全部环节的前提下,自主完成特定领域或开放领域复杂任务的智能实体。

AI 算法实战派 496

XCODE调试时强制更新模拟器上的资源文件

xcode使用模拟器调试时,拷贝到bundle中的资源文件有缓存,有时候修改了资源文件(比如图片或者lua文件)后再次编译运行,模拟器中的文件依然是旧版本。为了解决这个问题,可以在当前Target的Build Phases中添加一个Run Script项。 如果你用的是XCode5,界面上已经没有直接添加的按钮了,你需要通过菜单-Editor-Add  Build Phase-Add Run

碧水蓝天 2668

SAP PI 系统复制,不只是把数据库拷过去,而是一次集成拓扑的重新落位

文章摘要:SAP PI/PO系统刷新生产数据到测试环境时,标准系统复制无法自动处理集成中枢特有的环境绑定问题。系统复制后,PI仍保留生产环境的连接配置,可能导致测试系统向生产环境发送消息。SAP提供的CTC模板可自动化部分后续配置,但无法替代人工对接口风险的全面评估。关键在于系统复制前绘制接口风险地图,复制后进行分层次验证:禁用生产连接、重定向测试接口、复核安全配置,并通过代表性链路测试确保系统行为符合预期。这需要结合SAP标准流程与业务语义判断,形成完整的治理闭环。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 82

【Bug已解决】[Bug]: ValueError: No user query found in messages QWEN 3.5 27B VLLM 0.16.0 NIGHTLY 解决方案

用 vLLM 0.16.0 nightly 给发聊天请求时,服务端在处理消息时抛ValueError,请求失败。

博客 401

C++ 更新资源文件 代码封装

//Windows Api #include <windows.h> //C Standard Library #include <tchar.h> //C++ Standard Library #include <string> typedef std::basic_string<TCHAR> tstring; bool FsUpdataResource(const tstring& FilePath, const std::string&am.

liwen930723的专栏 638

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

WPF自动更新,FTP设置资源文件介绍

WPF自动更新,FTP设置资源文件介绍 去发现同类优质开源项目:https://gitcode.com/ 本文档提供的资源文件是一个专门为WPF客户端设计的自动更新程序。该程序的核心功能在于实现CS客户端程序的自动化更新,确保用户能够及时获得最新的客户端版本,享受到更加完善的服务。 此自动更新程序主要利用程序升级机制,通过高效、便捷的方式帮助客户持续优化使用体验。在实现过程中,FTP设置是关键环节...

gitblog_06798的博客 383

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

QtforAndroid更新APP资源文件:实现APP无缝自我更新

QtforAndroid更新APP资源文件:实现APP无缝自我更新 去发现同类优质开源项目:https://gitcode.com/ 在移动应用开发领域,确保用户始终使用最新版本的APP是提升用户体验和维护应用稳定性的关键。Qt for Android环境下,如何轻松实现APP的自我更新?本文将为您详细介绍一个开源项目——QtforAndroid更新APP资源文件,帮助您轻松实现APP的无缝更新。...

gitblog_06704的博客 814

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

设备网络SDK更新资源文件介绍

设备网络SDK更新资源文件介绍 去发现同类优质开源项目:https://gitcode.com/ 项目介绍 设备网络SDK更新资源文件是一款专注于更新网络SDK的辅助工具,提供了SDK开发包中必要的.dll文件和文件夹。这些资源文件是确保SDK正常运行的核心组件,包含了HCNetSDK.dll、HCCore.dll以及HCNetSDKCom文件夹等关键功能库。 项目技术分析 本项目主要涉及以下技术...

gitblog_06703的博客 348

C 线程更新UI界面 - 资源文件介绍

C# 线程更新UI界面 - 资源文件介绍 去发现同类优质开源项目:https://gitcode.com/ 在此仓库中,我们提供了一个详细的资源文件,主题围绕“C# 线程更新UI界面”。该资源文件的核心内容是通过委托机制,实现在子线程中对主线程UI界面的更新操作。 资源描述 本资源详细讲解了如何在C#编程语言中,安全地从子线程更新主线程的UI界面。在多线程编程中,一个常见的错误是在子线程中直接尝试...

gitblog_06756的博客 505

【Xcode 5】 资源文件更新后不自动复制的问题

升级到xcode5后一很奇怪的问题:资源文件以文件夹形式引入在xcode里, 但是如果更新资源文件夹下的图片, xcode不会自动复制到目标设备, 必须clean, 再build. 猜测可能的原因是xcode根据文件夹的更新日期来判断此文件夹需不需要重新复制 解决方法: 设置一个Build Phases在每次build的时候touch一下资源文件, 这样xcode就会重新复制资源文件

Teng's world 1744

解决 Xcode 5 资源文件更新后不自动复制的问题

解决方法: 设置一个Build Phases在每次build的时候touch一下资源文件, 这样xcode就会重新复制资源文件了

ym19860303的专栏 1695

关闭Win10自动更新资源文件介绍

关闭Win10自动更新资源文件介绍 去发现同类优质开源项目:https://gitcode.com/ 本资源文件为您提供了关闭或开启Win10系统自动更新的详细步骤,适用于多种版本系统,同时也能解决常规方法无法关闭自动更新的问题。该教程支持Windows 10 32位和64位操作系统。 功能特点: 详细的关闭步骤,确保操作正确无误。 覆盖多种版本的Windows 10系统,通用性强。 针对常规...

gitblog_06756的博客 318
上一篇: 获取文件数字签名证书信息
下一篇: Qt线程中会导致句柄数增加的行为
鱼公子哟西
博客等级 码龄14年 17粉丝 24原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值