我有一个.net应用程序,
现在,当我在64位计算机上通过setup.exe安装此应用程序时,它安装在Program Files [x86]文件夹中;我想这是在64位应用程序上模拟32位环境的WoW64功能。
现在当客户端要求将其转换为64位时,如果32位版本本身通过WoW64正常工作,为什么对他来说很重要?将其转换为64位会带来性能优势吗?
当我尝试将其转换为64位时,是否需要更改所有内容,即
请建议。
答案 0 :(得分:7)
不需要转换,您的应用已经作为64位进程运行。因为您在EXE项目中使用了AnyCPU。您将它安装到错误的文件夹,但如果没有其他进程尝试以编程方式启动您的文件夹,则无关紧要。这非常罕见。
从TaskMgr.exe,进程选项卡中验证这一点。 32位进程在其进程名称后面有* 32。
通过将安装项目的TargetPlatform设置更改为x64,使客户满意,以便将其安装在c:\ program files中。需要几分钟。
答案 1 :(得分:4)
您可以将.NET代码项目保留在AnyCPU上,但要安装到64位而不需要更改32位WOW,您需要更改您提到的安装程序项目属性。
如果您在安装程序中有自定义操作,则在更改为64位时这些操作可能无效。你可能得到一个BadImageFormatException
。要解决此问题,您需要了解生成的MSI:
http://adamhouldsworth.blogspot.com/2010/10/64bit-custom-actions.html
如果您的应用程序是独立的,它对客户端没有多大影响。当访问64位时,除了访问更多RAM之外,没有免费的性能优势(尽管JIT有不同类型的优化可用)。
我见过的唯一需要64位的情况是,当你在另一个应用程序中使用该DLL时,你不能在一个进程中混合bit-ness。
更新:或许缺少64位框架先决条件是因为您使用的是VS 2005?
答案 2 :(得分:3)
现在,当我在64位计算机上通过setup.exe安装此应用程序时,它已安装在 Program Files [x86]文件夹;我猜这是在64-上模拟32位环境的WOW功能 位申请。
不,它与程序无关,只与安装程序有关。
•安装程序(目标平台设置为X86,检测到依赖项设置为.net framework(x86))
32位安装程序将其安装在程序的32位文件夹中,无论程序是32位还是64位。
可悲的是,你不能让一个安装程序同时执行这两个操作 - 根据设计,你需要一个32位的安装程序和一个64位的安装程序。
这完全是关于MSI部分的设计决定,而且与该程序完全没有任何关系。
答案 3 :(得分:2)
64位可能会也可能不会产生性能差异。 64位应用程序也可以使用(方式)比32位应用程序更多的内存。
如果你在64位操作系统上启动AnyCpu exe,它应该以64位启动(参见任务管理器,32位进程附加* 32)。如果将应用程序设置为x64,则库必须是x64或AnyCpu。
如果您没有本机x64-only引用,可以将exe和dll保留为AnyCpu,但是您需要将设置修改为x64。
至于框架,在x64机器上(这是x64应用程序唯一运行的地方),框架总是包含32位和64位,可在C:\ Windows \ Microsoft.NET \ Framework和Framework64中找到分别。