0

我有一个我构建的 EXE,我试图将它安装在 Win7 机器上的 Program Files (x86) 文件夹中。确实有一些有趣的行为正在发生。程序有一个gui——我们使用wx-Python和XRC来处理界面。我们在发行版中包含一个 XRC 文件夹。该程序使用 getcwd() 来定位自身并找到 xrc 文件夹。然而,这真的很有趣——当我将程序放在 Program Files 中时,一切正常。当我将程序放在 Program Files x86 文件夹中时,我收到一条消息,告诉我它找不到 xrc 文件夹。
让我明确一点,此应用程序在 Program Files 中的 XP 机器上和 Vista 机器上以及 Program Files 中的 Win7 机器上运行良好

现在还有什么有趣的是,如果我双击 Program Files (x86) 文件夹中的 exe,它运行良好,但是当我尝试使用添加到开始/程序菜单的快捷方式运行它时,它不能正确运行。那是我收到错误消息的地方,表明程序找不到 xrc 文件夹。我还将程序移动到桌面上的一个文件夹中,并在根目录和其他所有位置启动并运行良好。因此,我确信指向 xrc 文件夹的代码是可以的。

所以回到这个问题。当程序从 x86 文件夹运行时,是否发生了导致路径引用变得混乱的事情?更重要的是它可以修复吗?

最后一点-为了尽可能确定问题与 xrc 文件夹的路径有关,我从应用程序的两个实例中删除了 xrc 文件夹,并且收到了与在 x86 中安装程序时收到的相同错误消息文件夹。

只是为了澄清,程序不会运行的唯一时间是当我使用开始菜单上的快捷方式时,exe 和所有部件都保存在 Program Files (x86) 文件夹中

Plasticsabers 的回答确实帮助我理解了这个问题,并且我能够解决它。这不是 Vista 与 XP 的问题,而是 32 位操作系统与 64 位的问题。

我需要在 64 位 XP 和 32 位 Win7 上运行。

4

1 回答 1

0

根据此说明,Program Files (x86) 文件夹专门用于 32 位程序文件,而不是用于 64 位程序的 Program Files 文件夹。

但是为了让 32 位程序假装它在 32 位机器上,工作目录的名称必须以“程序文件”的形式返回,因为这就是它在 32 位机器上的样子。这就是当您使用 getcwd() 向 Windows 询问工作目录时所看到的。由于您的程序试图在路径中使用该目录名称,而这实际上不是真正的 64 位机器上文件的路径,因此它会中断。

查看WOW64 文档,我怀疑它仅在从开始菜单启动时才会中断的原因是,这是一个 64 位进程的实例,它创建了一个 32 位进程,这会导致系统更改 ProgramFiles 环境变量。在双击启动它的情况下,它从一开始就是一个 32 位进程。

似乎您不是唯一遇到这种情况的人;此 Windows API似乎专门设计用于解决您所描述的问题。如果没有别的,它表明您所看到的行为是设计使然。

但这是学术性的。为了使自己免受这种事情的影响,我会使用类似的东西获得您的 exe 的绝对路径os.path.realpath(__file__),然后从那里开始。

于 2011-07-27T21:31:07.040 回答