【问题标题】:Going from 32-bit to 64-bit从 32 位到 64 位
【发布时间】:2012-08-06 17:58:29
【问题描述】:

细节: VC++ 7;程序在 XP 上运行,但在 Win7 上崩溃;使用 VS2003.NET 开发(老我知道,但这是我必须使用的,它工作得很好,非常感谢)

我有一个在 XP(32 位)上运行良好的程序。但是,我最近用 Win7 对其进行了测试,各种杂乱无章。我强烈怀疑我的程序如何处理注册表项。

注意:程序不会创建或销毁键,只会查询键并返回有趣的值。 (“有趣”如下所述)

在最简单的形式中,程序从 SCSI 连接设备读取数据,并将数据保存到主机 PC 上的文件中。程序查询 SCSI 适配器的注册表并返回程序用来访问设备的适配器 ID。

在我看来,从 XP 到 Win7 的注册表结构并没有改变,但不是 100% 确定的。任何对此的见解都会很棒:)

另外,我读到:http://www.techsupportalert.com/content/how-windows7-vista64-support-32bit-applications.htm Win7 做事的方式就像一种反射。这会改变我应该如何查询密钥吗?如果是这样,任何有关如何构造查询的信息都会很棒。

我想我需要知道的是:

  • 是否像在 RegQueryValueEx 方法中更改 hKey(或 lpValueName)一样简单?
  • 或者这是否意味着我需要更改 RegQueryValueEx 方法的其他方面?
  • 或者完全是别的什么?

提前谢谢你!

【问题讨论】:

  • 你没有更多信息然后“它崩溃了”吗?您应该能够(至少在 Win7 机器上进行调试构建)更好地了解它在何处以及如何表现不同。具体哪些 API 调用失败。
  • 啊。我已经放弃了那部分......截至目前,我只允许在 Windows 7 盒子上进行测试......>:|我的困境的一部分,但我正在努力让开发人员获得特权。繁文缛节 sigh 因此,我没有真正的调试权限......而且由于我们的管理员处理事情的方式,我无法在机器上运行调试版本,嗯?
  • 至于用户在程序中点击 SCSI 设备时“崩溃”,windows 抱怨出现错误,想知道我是否要报告它...lol 如果只有我居然可以让它向我报告!哈哈。无论如何......程序只是关闭。 ...而且我通常必须重新登录才能让程序再次打开...
  • @rene 我喜欢 - MiniDumpWriteDump 方法看起来会是一个非常有用的工具。谢谢你。不过,我仍在寻找有关注册表的更多信息。

标签: visual-c++ windows-7 32bit-64bit visual-studio-2003 registrykey


【解决方案1】:

首先在您自己的机器上通过Application Verifier 运行您的应用程序是值得的。特别感兴趣的是LuaPriv 部分,它将突出显示您的应用程序正在执行在 Vista 或 Win-7 中无法正常运行的操作的实例。这应该可以捕捉到您可能正在咨询与 XP 不同的注册表位置的任何时间。

需要注意的一点是,如果您正在读取由另一个应用程序创建的注册表项,那么它们可能位于不同的位置,例如在 32 位或 64 位视图中,或者虚拟化到每个- 用户位置(如果一个进程运行时认为它可以在任何地方写入,但没有管理员权限,则通常会发生这种情况,因此 Windows 会将注册表写入沙箱到虚拟化区域)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-03-22
    • 2014-08-13
    • 1970-01-01
    • 1970-01-01
    • 2018-12-29
    • 2020-10-28
    • 1970-01-01
    • 2012-10-26
    相关资源
    最近更新 更多