C#开发中可能存在的64位操作系统问题

时间:2009-12-11 18:20:45

标签: c# visual-studio-2008 windows-7 64-bit

我正在将操作系统更新为Windows 7 x64,我只有运行32位操作系统的经验。有没有人对64位环境有任何糟糕/良好的体验?

作为参考,我使用的工具是:

4 个答案:

答案 0 :(得分:21)

在64位操作系统上运行会产生许多副作用,这些副作用在某种程度上是显而易见的。最常见的问题:

  • 在Visual Studio中编辑并继续将无法正常工作。您可以通过强制.NET应用程序以32位模式运行来解决此问题。 Project + Properties,Build选项卡,Platform Target = x86。已在VS2013中解决。

  • 如果您在.NET应用程序中使用任何ActiveX控件或COM组件,您可能会发现您的程序不再有效,因为您的计算机没有相应的64位版本的COM服务器。您将收到错误0x80040154,REGDB_E_CLASSNOTREG,“未注册的类”。与上述相同。

  • 64位调试器不支持混合模式调试,您必须提交“仅托管”或“仅本机”调试。与上面相同的修复,只要您没有64位特定问题。已在VS2010中解决。

  • 声明在需要IntPtr的情况下声明uint或int的P / Invoke声明写得不好将在64位模式下停止工作。您通常会收到AccessViolation异常或失败返回代码。或PInvokeStackImbalance MDA警告。找到错误不应该有任何麻烦,只需修改声明即可。

  • 64位版本中没有几个传统的报废Microsoft库。这通常是Microsoft Access数据库的问题。与上述相同。

  • 您必须使用正确版本的Regasm.exe来注册[ComVisible]程序集。从Framework或Framework64中选择一个,具体取决于客户端程序是以64位还是32位模式运行。或两者都是如果您希望服务器可用。

  • 一些COM类型库在其方法声明中包含依赖于位的参数。 ADO 2.8是值得注意的。一定要使用正确的Tlbimp.exe位来生成正确的COM互操作程序集,Visual Studio将不会这样做。与Regasm.exe相同的方法

  • 32位程序具有与64位程序不同的注册表视图。特别是HKCR和HKLM \ Software荨麻疹是虚拟化的。在Regedit.exe中,可以在HKLM \ Software \ Wow6432Node键下看到32位可见键。这可能会导致使用注册表的程序出现许多细微问题。 .NET 4 RegistryKey.OpenBaseKey()允许指定所需的视图。

  • 对于COM,您将使用Regsvr32.exe的正确位数来注册非托管COM服务器(不是.NET服务器,它们使用Regasm.exe)。对于64位服务器,请使用c:\​​ windows \ system32中的一个,对于32位服务器,请使用c:\​​ windows \ syswow64。

  • 文件系统中的文件夹是虚拟化的,特别是c:\ windows \ system32和c:\ program files。 32位程序将显示c:\ windows \ syswow64和c:\ program files(x86)。

  • 安装人员需要考虑上述所有问题。

答案 1 :(得分:1)

如果每个程序都有x64下载链接,我不会太担心,然后使用它。如果没有,那么您的代码将通过WOW64仿真运行。而且你似乎觉得它正常运行。

请参阅this related question我在5分钟前回答。

  

WOW64指的是windows64上的windows32   它是一个透明的模拟   laywer,允许x86程序运行   在x64操作系统上。 WOW64会   如果你运行一个自动使用   x86 Windows上的x86 Windows程序   操作系统。

答案 2 :(得分:1)

我正在运行Windows 7 Ultimate x64。

  1. Visual Studio 2008工作正常。
  2. 我使用的是Subversion,但不是Tortoise。 AnkhSVN工作正常。
  3. 我没有经验的其他人。

答案 3 :(得分:0)

我使用的大多数软件都没有x64的问题,自XP x64问题已经过去几年了,人们似乎已经赶上了x64。

x64中开发的主要问题是,在Visual Studio中以x64模式运行时,在调试时无法编辑代码。

您必须使用x86作为目标平台才能执行此操作。

这是Visual Studio 2010的测试版之一默认目标平台为x32而不是任何平台的原因之一...