【问题标题】:Can a WinForms app be configured to run as "x86" without recompiling?可以将 WinForms 应用程序配置为在不重新编译的情况下以“x86”运行吗?
【发布时间】:2010-09-16 07:14:30
【问题描述】:

是否可以将针对“任何 CPU”编译的 WinForms 应用程序配置为在 64 位服务器上以“x86”方式运行而无需重新编译应用程序?具体来说,我正在寻找一个 app.config 设置或控制面板小程序来完成此目的。客户的所有客户端都是x86,但是服务器是x64,我们喜欢在服务器上安装WinForms应用,供管理员配置和监控系统。我们宁愿不要只为服务器重新编译。

【问题讨论】:

    标签: .net winforms configuration x86 x86-64


    【解决方案1】:

    来自http://www.request-response.com/blog/PermaLink,guid,34966ef8-3142-46b2-84e0-372b5c36ddcc.aspx

    但是,您可以控制和 甚至覆盖此默认行为 在你的代码被编译之后。 有一个方便的工具叫做 存在于 SDK 中的 corflags.exe 允许您强制“anycpu”编译 在 64 位中使用 32 位进程的代码 世界。

    这个实用程序的用法可以在这里找到http://msdn.microsoft.com/en-us/library/ms164699(VS.80).aspx

    【讨论】:

    • 我在我们客户的服务器上试用了这个,效果非常好!谢谢。我唯一的抱怨是在 Windows Server 2003 机器上安装 Windows SDK 太费劲了。
    • 您可以将它安装在开发机器上并更改其上的 exe。 :)
    【解决方案2】:

    如果您正确编写了托管代码,则无需进行任何配置。只要 64 位机器安装了正确的框架,JIT 进程就会处理 32 位和 64 位要求之间的任何差异。

    在您自己的代码中唯一需要注意的是您是否正在执行任何 P/Invoke。在这种情况下,任何时候调用使用 HANDLE 或 void* 类型的 API 函数时,都需要确保始终使用 System.IntPtr,而不是 System.Int32。在 .NET 世界中,int 数据类型始终为 32 位,即使在 64 位机器上也是如此。同样,无论何种架构,long 始终是 64 位。

    然而,IntPtr 始终是 void* 的大小,因此根据您运行的机器的体系结构,JIT 的大小也不同。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-13
      • 2014-03-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多