2012-03-02 61 views
1

我使用Windows XP 32位开发机器维护最初构建于Visual Studio 2005 Framework 2.0中的应用程序。将开发环境更改为64位Windows 7 - 应用程序崩溃

我的新开发机器是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:\程序文件(x86)\ UHINt2.5 \ ProviderDesktop.exe 断裂作用模块路径:C:\ Windows \ syswow64 \ KERNELBASE.dll 报告Id:53717437-64

事件类型:clr20r3 P1:providerdesktop.exe P2:2.6.1.1
P3:4f4fad5e P4:providerdesktop P5:2.6.1.1 P6在XP 8A-11e1的-a455-8a2e36aa00e8

运行,它崩溃:4f4fad5e
P7:85d P8:0 P9:system.io.fileloadexception

我在Google搜索问题后至今执行了2次诊断。

首先,我尝试了Fusion日志记录。没有被发现。

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

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

有些同事之前曾经提出过,由于真实应用中的第三方引用,我可能会遇到问题。从我在这里可以看到的情况来看,情况似乎并非如此。

如果有人能帮我解决这个问题,我一定会很感激,因为我对x86/x64等底层概念并没有太多的了解。这意味着在2010/.NET 4.0中快速开发一台不错的机器,并且为了这个应用程序需要保留一个XP/32的虚拟机,这个应用程序有严重的性能问题,并且在2005/.NET 2.0中开发。

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

非常感谢提前。

回答

0

我从来没有试过混用明确针对32位和64位的程序集。

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

0

如果不包含不安全的代码,.Net可以在64位机器上完美工作。大部分时间不安全的代码需要更正才能在本机64位模式下工作。

但是,您可以让您的应用程序在WOW(Windows on Windows)模式下工作,在这种情况下,您的应用程序将在32位计算机上工作。它在项目属性中启用,将平台目标设置为x86而不是任何CPU。

相关问题