Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Win7上从Progam文件X86和程序文件运行时,Python exe的异常行为是否正在进行虚拟化?_Python_Windows_Program Files - Fatal编程技术网

在Win7上从Progam文件X86和程序文件运行时,Python exe的异常行为是否正在进行虚拟化?

在Win7上从Progam文件X86和程序文件运行时,Python exe的异常行为是否正在进行虚拟化?,python,windows,program-files,Python,Windows,Program Files,我有一个我构建的EXE,我正试图将其安装在Win7机器上的Program Files(x86)文件夹中。这是一种非常有趣的行为。该程序有一个gui,我们使用wx Python和XRC来处理该界面。我们在发行版中包含一个XRC文件夹。程序使用getcwd()定位自身并查找xrc文件夹。然而,这真的很有趣,当我把程序放在程序文件中时,一切都很好。当我将程序放在program Files x86文件夹中时,会收到一条消息,指示它找不到xrc文件夹。 让我澄清一下,这个应用程序在程序文件中的XP机器、V

我有一个我构建的EXE,我正试图将其安装在Win7机器上的Program Files(x86)文件夹中。这是一种非常有趣的行为。该程序有一个gui,我们使用wx Python和XRC来处理该界面。我们在发行版中包含一个XRC文件夹。程序使用getcwd()定位自身并查找xrc文件夹。然而,这真的很有趣,当我把程序放在程序文件中时,一切都很好。当我将程序放在program Files x86文件夹中时,会收到一条消息,指示它找不到xrc文件夹。
让我澄清一下,这个应用程序在程序文件中的XP机器、Vista机器以及程序文件中的Win7机器上运行良好

现在有趣的是,如果我双击Program Files(x86)文件夹中的exe,它可以正常运行,但当我尝试使用添加到“开始/程序”菜单的快捷方式运行它时,它无法正常运行。这就是我得到的错误消息,表明程序没有找到xrc文件夹。我还将程序移动到桌面上的一个文件夹中,在根目录和其他每个位置,它都可以正常启动和运行。因此,我相信我指向xrc文件夹的代码是正确的

回到问题上来。当程序从x86文件夹运行时,是否发生了导致路径引用扭曲的情况?更重要的是它是可修复的吗

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

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

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

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

根据,Program Files(x86)文件夹专门用于32位程序文件,而Program Files文件夹专门用于64位程序

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

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

似乎你不是唯一遇到这种情况的人;似乎是专门为解决您描述的问题而设计的。如果没有其他迹象表明你看到的行为是故意的


但这是学术性的。为了将自己与这类事情隔离开来,我将使用类似于
os.path.realpath(\uuu file\uuu)
的东西获取exe的绝对路径,然后从那里开始。

为什么它适用于安装在Program Files目录中的版本?请注意,我说的是在许多地方安装的完全相同的应用程序,在每种情况下,我都在“开始”菜单上安装了一条捷径。如果您能澄清这一点,我将不胜感激。如果指向其他安装的链接中有一个“起始位置”文件夹,允许他们找到该文件夹,那么它将在其他地方安装。因此-(grr输入handling)处理此问题的典型方法是从sys.argv[0]获取启动可执行文件的路径,通过os.path.abspath()传递该路径,我还在挣扎,因为我在任何方面都没有做任何改变case@plasticsaber我正在研究你的建议,但很抱歉我不清楚,它在所有情况下都有效(从“开始”菜单和在安装(x86)时双击exe)在x86文件夹中,它只需双击可执行文件即可启动