0

规格: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 方法的其他方面?
  • 还是完全不同的东西?

先感谢您!

4

1 回答 1

0

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

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

于 2012-08-06T20:57:10.693 回答