代码之家  ›  专栏  ›  技术社区  ›  flipdoubt

为什么在“C:\Program Files(x86)”之外运行时,为“x86”编译的WinForms应用程序不会在“x64”计算机上退出?

  •  0
  • flipdoubt  · 技术社区  · 16 年前

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

    在x64计算机上运行为x86编译的WinForms应用程序时,安装位置真的重要吗?

    2 回复  |  直到 16 年前
        1
  •  1
  •   em70    16 年前

    根据我的经验,我可以告诉你,在x64系统上几乎可以从任何位置运行x86二进制文件(如果二进制文件在system32中,我还没有测试过是否仍然有效,但我相信x86程序可以从程序文件运行)。我相信程序文件/程序文件(x86)文件夹只是为了轻松区分原生x64应用程序和旧x86应用程序。从你的描述来看,你面临的问题听起来很像是WoW64兼容性问题,但是如果你对非托管代码有依赖关系,你可能想先验证该非托管代码是否运行良好,然后深入了解是什么阻止了你的程序关闭。此外,如果应用程序使用多个线程或单个线程,那么首先了解如何终止应用程序将很有帮助。目标.NET运行时和服务器上安装的版本(包括Service Pack)。

        2
  •  1
  •   JaredPar    16 年前

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

    c: \程序文件(x86)\MyApplication\DataDirectory\SomeDataFile.txt

    但该应用程序已部署到程序文件中。所以真正的道路是

    c: \程序文件\MyApplication\DataDirectory\SomeDataFile.txt

    推荐文章