2009-04-25 70 views
0

我们有一个在x86上运行良好的WinForms应用程序,但有许多第三方组件可以进行win32调用。为了让应用程序在x64上运行,我现在编译x86平台。我们的习惯是在系统分区之外的服务器上安装我们的胖客户端,所以我们昨天在Win2003 x64服​​务器上安装了“F:\ Program Files(x86)”。从该目录运行时,进程拒绝退出。我试图在任务管理器,taskkill和Process Explorer中杀死它们,但是重新引导服务器会导致这些进程中断。当我卸载并重新安装在C:\ Program Files(x86)中时,进程正常退出。在“C: Program Files(x86)”之外运行时,为什么我的WinForms应用程序不能编译为“x86”,而是在“x64”计算机上退出?

在x64机器上运行针对x86编译的WinForms应用程序时,安装位置是否真的很重要?

+0

是否在x86上的其他位置(而不是程序文件)工作? – 2009-04-25 14:34:37

+0

是F:本地物理硬盘还是映射的东西,网络共享或类似的东西? – 2009-04-25 17:54:47

+0

@Mehrdad:是的,该应用程序完全可在客户端上部署。 – flipdoubt 2009-04-28 16:43:11

回答

1

根据我的经验,我可以告诉它可以在几乎任何位置的x64系统上运行x86二进制文件(如果二进制文件在system32中,如果事情仍然有效,但是我确信x86程序可以从Program Files运行)。我相信程序文件/程序文件(x86)文件夹只是为了方便区分本机x64应用程序和旧x86应用程序。从你的描述来看,你所面对的听起来很像WoW64兼容性问题,但是如果你有非托管代码的依赖关系,那么你可能首先需要验证这个非托管代码是否运行正常,然后深入挖掘阻止你的程序收盘。另外,知道如何尝试终止应用程序,如果它使用多个线程或单个线程,目标版本的.NET运行时版本以及服务器上安装的版本(包括。 服务包)。

1

这是在黑暗中拍摄的照片。您的程序是否尝试读取或加载与应用程序一起部署在同一目录或子目录中的任何数据?如果是这样,您可能会遇到以下问题。

您的应用程序可能使用的值取决于正在运行的处理器体系结构以查找目录。以环境变量ProgramFiles为例。在64位机器上,ProgramFiles环境变量实际上将指向32位应用程序的“Program Files(x86)”目录。所以这是可能的,你是程序试图加载像下面和崩溃

string root = Environment.GetVariable("ProgramFiles"); 
string file = Path.Combine(root, "MyAppName\DataDirectory\SomeDataFile.txt"); 
string data = File.ReadAllLines(file); 

最后一行将失败,因为路径将解析为数据

C:\ Program Files文件(x86)的\ MyApplication \ DataDirectory \ SomeDataFile.txt

但是该应用程序已部署到Program Files中。所以,真正的路径将是

C:\ Program Files文件\ MyApplication的\ DataDirectory目录\ SomeDataFile.txt

相关问题