全部,
我将我的应用程序设置存储在资源中。当我的程序首次加载时,我使用 WinAPI 读取指定的资源。然后我解析检索到的字节数据。这对我来说完美无缺。
现在假设用户更改了我的应用程序中的设置。他/她选中一个复选框控件。我想将更新后的设置保存到我的资源中。但是,在我的应用程序运行时,我对 UpdateResource 的调用似乎不起作用。即使大小相同,我也无法修改我的资源数据。
首先,是否可以修改正在运行的图像的资源数据?其次,如果这不可能,我有什么替代方法可以在我的应用程序内部存储设置?
注意:我必须在运行的可执行文件中进行设置。它们不能在硬盘驱动器上或注册表中。请不要建议将其作为一个选项。
最佳答案
编写自修改代码是 100% 可能的。只是做起来并不容易。
当您启动可执行文件时,Windows 会将其映射到内存中。这实质上会锁定文件并防止在文件运行时进行编辑。显然,您可以取消映射您的程序(通过使用 ntdll 中未记录的函数)。取消映射文件后,您将能够对其进行更改。
这有点类似于您想要做的:http://www.johnfindlay.plus.com/lcc-win32/asm/SelDelNT.htm
显然,您想进行更改而不是删除它。疯狂背后的想法是一样的——你必须取消映射文件。
关于c# - 修改正在运行的可执行文件的资源内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4577564/