0

具体内容: VC++ 7;程序在XP上运行,但在Win7上崩溃;开发使用VS2003.NET(老我知道,但这是我的工作很好,非常感谢你)从32位到64位

我有一个在XP(32位)上运行良好的程序。不过,我最近用Win7测试过它,各种各样的choas都被打破了。我强烈的怀疑是我的程序如何处理注册表项。

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

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

对我来说,它看起来并不像注册表结构从XP更改为Win7,但不是100%确定。任何洞察力,将是伟大的:)

此外,我在阅读:http://www.techsupportalert.com/content/how-windows7-vista64-support-32bit-applications.htm Win7的方式做事情就像一个反射。这是否会改变我应该如何查询密钥?如果是这样,关于如何构建查询的任何信息将是很好的。

我想我需要知道的是:

  • 是化繁为简的方法的RegQueryValueEx改变的hKey(或lpValueName)?
  • 或者这是否意味着我需要更改RegQueryValueEx方法的其他方面?
  • 还是别的什么?

预先感谢您!

+1

难道你没有更多的信息,然后'它崩溃'?你应该能够(至少在Win7盒子上有一个调试版本)来更好地了解它在哪里以及如何表现不同。特别指出哪些API调用失败。 – rene 2012-08-06 18:04:16

+0

啊。我已经离开了那部分....截至目前,我只允许在Windows 7盒子上进行测试....>:|我的困境的一部分,但我正在努力让开发者对其进行私有化。红色磁带*叹息*因此,我没有真正的调试功能......并且由于我们的管理员如何处理事情,我无法在机器上运行调试版本 - 呵呵? – redhotspike 2012-08-06 18:06:38

+0

至于用户在程序中点击SCSI设备时的“崩溃”,windows会抱怨发生了错误,并想知道我是否想要报告它......大声笑,如果我真的可以真正将它报告给我!大声笑。无论如何...该方案只是关闭。 ...我通常必须记录然后重新打开程序... – redhotspike 2012-08-06 18:09:32

回答

0

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

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