【问题标题】:Possible 64-bit operating system issues in C# developmentC# 开发中可能出现的 64 位操作系统问题
【发布时间】:2010-12-25 18:51:47
【问题描述】:

我正在将我的操作系统更新到 Windows 7 x64,我只有运行 32 位操作系统的经验。有人对 64 位环境有什么不好/好的经历吗?

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

【问题讨论】:

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


    【解决方案1】:

    在 64 位操作系统上运行会产生一些副作用,这些副作用在某种程度上会很明显。最常见的问题:

    • 在 Visual Studio 中编辑并继续不起作用。您可以通过强制 .NET 应用程序在 32 位模式下运行来解决此问题。项目 + 属性,构建选项卡,平台目标 = x86。在 VS2013 中解决。

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

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

    • 在需要 IntPtr 的地方声明 uint 或 int 的编写不当的 P/Invoke 声明将停止在 64 位模式下工作。您通常会收到 AccessViolation 异常或失败返回代码。或 PInvokeStackImbalance MDA 警告。定位错误应该没有任何问题,只需修复声明即可。

    • 几个旧的生命周期结束的 Microsoft 库在 64 位版本中不可用。这是 Microsoft Access 数据库最常见的问题。与上述相同的修复。

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

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

    • 32 位程序的注册表视图与 64 位程序不同。特别是 HKCR 和 HKLM\Software 配置单元是虚拟化的。在 Regedit.exe 中,32 位可见键位于 HKLM\Software\Wow6432Node 键下。这可能会导致使用注册表的程序出现许多微妙的问题。 .NET 4 RegistryKey.OpenBaseKey() 允许指定您想要的视图。

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

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

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

    【讨论】:

    • regasm 真的花了我很多时间才弄清楚。谢谢!
    【解决方案2】:

    我不会太担心,如果每个程序都有一个 x64 下载链接,那么就使用它。如果没有,那么您的代码将通过 WOW64 仿真运行。在您看来,它运行正常。

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

    WOW64 指 windows64 上的 windows32 它是一个透明的仿真 允许x86程序运行的laywer 在 x64 操作系统上。 WOW64将 如果您运行 x64 Windows 上的 x86 Windows 程序 操作系统。

    【讨论】:

      【解决方案3】:

      我正在运行 Windows 7 Ultimate x64。

      1. Visual Studio 2008 工作正常。
      2. 我使用的是 Subversion,但不是 Tortoise。 AnkhSVN 运行良好。

      其他我没有经验。

      【讨论】:

        【解决方案4】:

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

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

        您必须使用 x86 作为目标平台才能这样做。

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-10-01
          • 1970-01-01
          • 2011-02-20
          • 1970-01-01
          • 2010-12-02
          • 2013-08-29
          • 2011-04-17
          • 1970-01-01
          相关资源
          最近更新 更多