[英]converting .net application 32 bit to 64 bit
我有一个 .net 应用程序,
现在,当我在 64 位机器上通过 setup.exe 安装此应用程序时,它安装在 Program Files [x86] 文件夹中; 我猜这是在 64 位应用程序上模拟 32 位环境的 WoW64 功能。
现在,当客户要求将其转换为 64 位时,如果 32 位版本本身可以通过 WoW64 正常工作,为什么对他来说很重要? 将其转换为 64 位会带来性能优势吗?
当我尝试将其转换为 64 位时,是否需要全部更改,即
请建议。
无需转换,您的应用程序已作为 64 位进程运行。 因为你在 EXE 项目上使用了 AnyCPU。 您将其安装到了错误的文件夹中,但如果没有其他进程尝试以编程方式启动您的文件夹,这并不重要。 这是极其罕见的。
从 TaskMgr.exe 的“进程”选项卡中验证这一点。 32 位进程的进程名称后有 *32。
通过将安装项目的 TargetPlatform 设置更改为 x64 来让您的客户满意,这样它就会安装在 c:\program 文件中。 带你几分钟。
您可以将 .NET 代码项目保留在 AnyCPU 上,但是要安装到 64 位而不遇到 32 位 WOW 内容,您需要更改您提到的安装程序项目属性。
如果您在安装程序中有自定义操作,当您更改为 64 位时,这些操作可能不起作用。 你可能会得到一个BadImageFormatException
。 要解决此问题,您需要处理生成的 MSI:
http://adamhouldsworth.blogspot.com/2010/10/64bit-custom-actions.html
如果您的应用程序是独立的,它不会对客户端产生太大影响。 转到 64 位时,除了访问更多 RAM 之外,没有免费的性能优势(尽管 JIT 有不同类型的优化可用)。
我见过的唯一需要 64 位的情况是,当您在另一个应用程序中使用 DLL 时,您不能在单个进程中混合位。
更新:也许缺少 64 位框架先决条件是因为您使用的是 VS 2005?
现在,当我在 64 位机器上通过 setup.exe 安装此应用程序时,它安装在 Program Files [x86] 文件夹中; 我猜这是在 64 位应用程序上模拟 32 位环境的 WOW 功能。
不,它与程序无关,仅与安装程序有关。
•安装程序(目标平台设置为 X86 和检测到的依赖项设置为 .net 框架(x86))
32位安装程序将其安装在程序的32位文件夹中,无论程序是32位还是64位。
遗憾的是,您不能让一个安装程序同时执行这两种操作 - 您需要一个 32 位安装程序和一个 64 位安装程序,从设计上来说。
这完全是 MSI 部分的设计决定,并且与程序完全无关。
64 位可能会或可能不会产生性能差异。 与 32 位应用程序相比,64 位应用程序还可以使用(方式)更多的 memory。
如果您在 64 位操作系统上启动 AnyCpu exe,它应该以 64 位启动(请参阅任务管理器,32 位进程在此处附加 *32)。 如果将应用程序设置为 x64,则库必须是 x64 或 AnyCpu。
如果您没有纯 x64 的原生引用,您可以将您的 exe 和 dll 保留为 AnyCpu,但您需要将设置修改为 x64。
至于框架,在 x64 机器上(这是 x64 应用程序运行的唯一地方),框架始终包含 32 位和 64 位,分别位于 C:\Windows\Microsoft.NET\Framework 和 Framework64 中。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.