【发布时间】:2012-03-21 05:11:54
【问题描述】:
我使用 Windows XP 32 位开发机器维护最初在 Visual Studio 2005 框架 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 报告 ID:53717437-648a-11e1-a455-8a2e36aa00e8
在 XP 上运行,它会崩溃:
事件类型: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 应用中的 3rd 方引用而遇到问题。从我在这里看到的情况来看,情况似乎并非如此。
如果有人能帮我解决这个问题,我会非常感激,因为我对 x86/x64 等较低级别的概念确实知之甚少。这意味着在 2010/.NET 4.0 中在一台快速的机器上进行开发与仅针对具有严重性能问题并在 2005/.NET 2.0 中开发的这个应用程序而必须保留一个 XP/32 左右的 VM 之间的区别。
我的目标是能够在 Win7x64、2010、4.0 上开发应用程序,并让更新程序毫无问题地更新客户端的应用程序版本。
非常感谢。
【问题讨论】:
标签: .net frameworks 32bit-64bit