c# - 修改正在运行的可执行文件的资源内容

标签 c# c++ windows file resources

全部,

我将我的应用程序设置存储在资源中。当我的程序首次加载时,我使用 WinAPI 读取指定的资源。然后我解析检索到的字节数据。这对我来说完美无缺。

现在假设用户更改了我的应用程序中的设置。他/她选中一个复选框控件。我想将更新后的设置保存到我的资源中。但是,在我的应用程序运行时,我对 UpdateResource 的调用似乎不起作用。即使大小相同,我也无法修改我的资源数据。

首先,是否可以修改正在运行的图像的资源数据?其次,如果这不可能,我有什么替代方法可以在我的应用程序内部存储设置?

注意:我必须在运行的可执行文件中进行设置。它们不能在硬盘驱动器上或注册表中。请不要建议将其作为一个选项。

最佳答案

编写自修改代码是 100% 可能的。只是做起来并不容易。

当您启动可执行文件时,Windows 会将其映射到内存中。这实质上会锁定文件并防止在文件运行时进行编辑。显然,您可以取消映射您的程序(通过使用 ntdll 中未记录的函数)。取消映射文件后,您将能够对其进行更改。

这有点类似于您想要做的:http://www.johnfindlay.plus.com/lcc-win32/asm/SelDelNT.htm

显然,您想进行更改而不是删除它。疯狂背后的想法是一样的——你必须取消映射文件。

关于c# - 修改正在运行的可执行文件的资源内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4577564/

相关文章:

c# - 为什么即使 IsRequired 为真,ConfigurationValidator 也会验证 ConfigurationProperty 的默认值?

c# - 将应用程序依赖项部署到程序文件夹或 GAC

javascript - MMO WebSocket 服务器 : Node. js 或 C++?

c++ - C 链表 : Inserting nodes to the end

c++ - 为什么 g++ 和 MS Visual Studio C++ 执行以下代码的方式不同?

windows - 使用 Windows 8 专业版作为我的开发机器

c# - 映射多对多关系与/外键引用

c# - Moq - 验证具有参数值的方法调用

windows - 我应该对 pdb 行号给予多少信任?

c - c中复数的算术运算