【问题标题】:How to change variables of a .exe file?如何更改 .exe 文件的变量?
【发布时间】:2018-04-06 01:49:27
【问题描述】:

我希望我的 Visual C# 程序允许用户生成一个可移植的 .exe 文件,以便在另一个用户的计算机上运行,​​该可移植 .exe 文件接收第一个用户插入的值。我不想使用配置文件或任何其他文件来存储要读取的输入值,因为我希望 .exe 成为单个文件。我有主程序和第二个程序(未来的可移植可执行文件) 作为同一解决方案上的不同项目。有没有办法修改可移植 .exe 的值,或者是否需要即时编译新程序?

【问题讨论】:

  • 我不是 100% 确定你在寻找什么,但是在没有配置文件的情况下将值传递给 .exe 可以通过在命令行参数中传递值来完成。
  • @Amit 明智的解决方案...即时重新编译 exe 或在内存中破解值的所有娱乐价值在哪里 :)
  • 支持命令行参数和快捷方式。
  • @Kreator 仅供参考,如果您的可移植 .exe 确实可以从网络(从特定 URL)读取数据,您可以随时更新该 URL 上的值,因此您的可移植 .exe 将获得更改的值而无需重新正在编译!

标签: c# .net visual-studio exe


【解决方案1】:

正式回答问题。

您可以将程序集转换为 IL、搜索和替换以及重新编译。但是,如果您正在构建此应用程序,您应该非常彻底地考虑需求和用例。

如果您只需要修改应用程序的行为,您有很多选择。

  • 注册(可以远程完成)
  • 一个配置文件(虽然你排除了这个)
  • 您可以使用登录方法访问资源
    • 例如 Wcf
    • 活动目录
    • 网络数据库
  • 为这些用户重建您的应用
  • Msbuild 使用批处理文件进行调整
  • 预构建脚本

如果您真的很棘手,您“可能”能够追踪 int 的偏移量并对其进行调整。然而这似乎很不可靠

或者,如果您真的对此有心,请参阅以下问题和相关问题

Modify Emdeded String in C# compiled exe

Is it possible to Add/Remove/Change an embedded resource in .NET DLL?

更新来自 Ben Voigt 评论

Win32 资源可以在嵌入到EXE 中后更改。 .NET System.Resources 只能在嵌入前更改。 C# 应用程序 两种都兼容,但是区别很重要 必要的功能是UpdateResource

【讨论】:

  • 您可以嵌入资源并在以后更改它们而无需重新编译。
  • 经过更多研究,我应该澄清一下——Win32 资源可以在嵌入到 EXE 后更改。 .NET System.Resources 只能在嵌入前更改。 C# 应用程序兼容这两种类型,但区别非常重要。
  • @TheGeneral 非常感谢您详细而完整的回答!
【解决方案2】:

您通常可以附加到 .exe 而不会破坏它,然后在执行时读取数据。

见:appending data to an exe

【讨论】:

  • 是的,使用为此目的制作的 Win32 资源函数和滚动你自己的都是完全可行的。 (Win32 Resource Functions 为您提供了一个目录/目录,因此可以通过名称读取和写入资源......但使用现有方案也意味着您的数据可以通过现有工具找到)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-11-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-09
  • 1970-01-01
  • 2019-07-30
相关资源
最近更新 更多