2010-04-21 70 views
0

我们正在开发使用Visual C#2008 Express在Windows XP计算机(32位)下基于WPF的程序。如何检查代码是否与Windows 7兼容

的事情是,我们试图在两个Windows 7计算机上运行程序,一个是32位的Windows 7和另一个是64位的Windows 7

在Windows XP中,一切都很好。在Windows 7机器上,它启动32位版本,虽然在运行一个功能时发生错误(它在XP中不会发生)。

在W7 64位它甚至不会启动。这是正常的吗?即使执行速度较慢,也无法在W7 64位下运行32位程序?

我们如何检查代码是否与Windows 7兼容?

非常感谢您提前。

Julen。

回答

1

我认为这不是一个兼容性的问题。 Windows 7,32位和64位应该完全兼容C#WPF应用程序。它不会在64位操作系统上运行明显慢。你不应该注意到任何退化。

如果你的应用程序在Win7上崩溃检查你的代码,检查它抛出的异常..我几乎相信罪魁祸首是在那里。

+0

事情是我们现在承受不起一个新的W7许可证来调试代码。无论如何,我们正在用消息进行一些测试,它看起来像一个数据库问题。我们的应用程序很小,使用Access数据库。我们已经包含了JET Access“插件”,因此我们可以连接到数据库角色,如果目标计算机具有Access或不。我们是否应该包含W7特定的JET访问?我们很苦恼与Access,但它是使用“强制”。谢谢! – Julen 2010-04-21 11:28:13

+0

啊哈! Ms Access :)查看我发布在顶部的新答案 – 2010-04-21 11:56:37

0

当我在Win XP 32位下开发了一个我的爱好项目并尝试在64位Vista上运行它时,我有同样的iseeu。即使目标CPU被设置为“任何CPU”,该应用程序甚至没有启动并且有时开始抛出错误。

现在我用Win 7机器(64)位进行开发,并将目标CPU设置为“任何CPU”。它在Vista和XP(32位和64位)中运行时没有任何问题。

你也可以只用“32位”模式。你的应用程序不会有任何性能问题。

我建议你在Windows 7电脑上打开应用程序,然后调试或重新编译并在Vista和xp等较低版本中进行测试。

+0

谢谢!请参阅上面的答案。 – Julen 2010-04-21 11:28:33

2

我同意Artiom并只看到一个有效的答案:在Windows 7上测试它。 我们可以写下来这里可能出现的问题的列表(我会在第二个做的),但你仍然需要

  • 对相关架构
  • 测试软件检查错误信息/条件自己

可能发生的变化,XP和Windows 7之间:

用户访问控制(UAC): 这意味着你的程序不使用管理权限运行,除非你

  • 明确启动它就像是在Vista/Windows7的支持

这也意味着你的应用程序不能写入某些文件夹在一个特定的清单资源是

  • 需要管理权限(UAC试图通过“虚拟文件夹重定向”“帮助”你:如果你写入%ProgramFiles%,它将静默写入你的用户配置文件并“成功”。如果其他用户希望在%ProgramFiles%directoy中看到您的更改(尽管它不会在那里)),甚至不会出现错误。

    关于您的具体报告和问题:

    1)提供有关该功能的更多详细信息。也许它取决于Windows7上不存在的DLL(但在每台XP机器上)。也许它只是与权限有关(见上文)。更多详情 - >更多帮助。

    2)同样地,更多的细节。可能的候选人:您的应用程序以64位应用程序运行,尽管它通过P/Invoke在32位本机DLL上具有硬/早期依赖性。同样,你提供的信息不够。

  • +0

    谢谢大家!我们已将代码移至基于W7的计算机并调试代码。正如你所提到的,当尝试更新数据库中的值时,恰好是权限问题。我们试图在代码中以编程方式更改文件的权限,但我们无法或不知道如何去做。你是否可以做?该数据库文件顺便在Program Files文件夹下。 – Julen 2010-04-22 10:17:28

    +0

    好吧,改变这一点。您不应该写入Program Files文件夹。如果它是用户特定的内容,请写入他们的配置文件。如果它对整个机器有价值,请使用ProgramData目录。查看此博客文章:http://blogs.msdn.com/cjacks/archive/2008/02/05/where-should-i-write-program-data-instead-of-program-files.aspx – 2010-04-22 11:39:59

    4

    好,为用户提供一些更多的信息,相信匪徒已被发现。 客户端在其应用程序中使用MS Access数据库(标准MS Jet提供程序)。问题是,微软并没有MS喷气供应商的64位版本,并将不会做到这一点。不知道为什么:)

    因此,要使应用程序在Windows 7 64位上运行,请执行以下操作:在Visual Studio中转到项目属性,然后在Build选项卡中,Platform目标将Any CPU更改为x86。这将迫使应用程序以32位唯一模式编译(将在Win7 64下的WOW64下运行),并且该应用程序将能够访问Access数据库。我认为,这就是为什么它不能在64位操作系统:)

    关于运行,我建议得到有关错误的更多细节,并用它创建一个新的问题:“运行一个功能时出现错误” 。

    玩得开心,好运!