将开发环境更改为64位Windows 7 - 应用程序崩溃

时间:2012-03-02 17:29:05

标签: .net frameworks 32bit-64bit

我使用Windows XP 32位开发机器维护一个最初在Visual Studio 2005 Framework 2.0中构建的应用程序。

我的新开发机器是Windows 7 64位。

我将我的解决方案加载到Visual Studio 2010中并成功转换了所有项目(实际应用程序使用了几个),并更新到Framework 4.0。

在调试模式下,应用程序运行没有问题。

现在,它的工作方式是只部署了一个安装程序。更改将部署到服务器。当应用程序在安装后运行时,它实际上运行一个更新程序应用程序来检查文件更改与服务器的关系,如果找到,则会下载它们,替换客户端上的原始文件,然后“真正的”应用程序是运行

将我在64位计算机上编译的第一个版本部署到服务器后,我运行已安装的应用程序版本以测试它是否正常工作。更新程序似乎工作正常,但当它启动“真正的”应用程序时,它崩溃。

在Windows 7上运行,它崩溃了:

错误应用程序名称:ProviderDesktop.exe,版本:2.6.0.0,时间戳:0x4f4fad5e 错误模块名称:KERNELBASE.dll,版本:6.1.7600.16850,时间戳:0x4e211485 异常代码:0xe0434352 故障偏移:0x0000b9bc 错误进程id:0x2388 错误应用程序启动时间:0x01ccf8971407b4fe 错误的应用程序路径:C:\ Program Files(x86)\ UHINt2.5 \ ProviderDesktop.exe 错误模块路径:C:\ Windows \ syswow64 \ KERNELBASE.dll 报告编号:53717437-648a-11e1-a455-8a2e36aa00e8

在XP上运行,它崩溃了:

EventType:clr20r3 P1:providerdesktop.exe P2:2.6.1.1
P3:4f4fad5e P4:providerdesktop P5:2.6.1.1 P6:4f4fad5e
P7:85d P8:0 P9:system.io.fileloadexception

我在谷歌搜索问题后到目前为止已经进行了2次诊断。

首先,我尝试了Fusion日志记录。什么都没找到。

其次,我尝试了DependencyWalker,在Windows 7开发机器上加载有故障的应用程序。它显示缺少IESHIMS.DLL。参考this帖子,我找到了IESHIMS.DLL,但在DependencyWalker中注意到它实际上期望DLL在应用程序的根文件夹中。我把它放在那里,重新运行DependencyWalker,错误消失了。但是,还有另一个错误,我强烈怀疑是问题的根本原因:错误:找到了具有不同CPU类型的模块。

DependencyWalker中列出的每个模块都是x64,除了ieshims.dll和我的实际.exe是x86。 Updater和Real应用程序都面向x86平台。

有些同事之前曾建议我可能因Real应用中的第三方引用而遇到问题。从我在这里看到的情况来看,情况似乎并非如此。

如果有人可以帮我解决这个问题,我肯定会感激它,因为我对x86 / x64这样的低级概念知之甚少。这意味着在2010 / .NET 4.0中开发一台漂亮的快速机器并且必须为这个具有严重性能问题且在2005 / .NET 2.0中开发的应用程序保持VM / XP大约的差异。

我的目标是能够在Win7x64,2010,4.0上开发应用程序,并让更新程序更新客户端版本的应用程序而不会出现问题。

非常感谢提前。

2 个答案:

答案 0 :(得分:0)

我从未试图混合明确针对32位和64位的程序集。

您是否尝试将所有目标更改为任何CPU?

答案 1 :(得分:0)

如果不包含不安全的代码,.Net可以在64位计算机上完美运行。大多数情况下,不安全代码需要更正才能在本机64位模式下工作。

但是,您可以要求您的应用程序在WOW(Windows on Windows)模式下工作,在这种情况下,您的应用程序将在32位计算机上运行。它在项目属性中启用,将Platform target设置为x86而不是Any CPU。