Необычное поведение Python exe при запуске из Progam Files X86 в сравнении с файлами программ на Win7. Есть ли какая-нибудь виртуализация? - PullRequest
0 голосов
/ 28 июля 2011

У меня есть созданный EXE-файл, который я пытаюсь установить в папку Program Files (x86) на компьютерах с Win7.Там происходит действительно интересное поведение.В программе есть интерфейс: мы использовали wx-Python и XRC для управления интерфейсом.мы включаем папку XRC в дистрибутив.Программа использует getcwd (), чтобы найти себя и найти папку xrc.Однако, и это действительно интересно - все отлично работает, когда я помещаю программу в Program Files.Когда я помещаю программу в папку Program Files x86, я получаю сообщение о том, что она не может найти папку xrc.
Позвольте мне пояснить, что это приложение отлично работает на компьютере с XP в Program Files и наVista Machine, а также машина Win7 в Program Files

Что еще интересно, если дважды щелкнуть exe-файл в папке Program Files (x86), он работает нормально, но когда я пытаюсь запустить его изярлык, добавленный в меню «Пуск» / «Программа», работает неправильно.Вот где я получаю сообщение об ошибке, которое говорит о том, что программа не находит папку xrc.Я также переместил программу в папку на рабочем столе, а в корне и в любом другом месте она запускается и работает нормально.Таким образом, я уверен, что мой код, указывающий на папку xrc, в порядке.

Итак, вернемся к вопросу.Когда программы запускаются из папки x86, происходит ли что-то, что приводит к путанице в путевых ссылках?Что более важно, это исправимо?

Последнее замечание. Чтобы быть как можно более точным, проблема связана с путем к папке xrc. Я удалил папку xrc из двух экземпляров приложения и получаю ту же ошибку.сообщение, которое я получил, когда программа была установлена ​​в папке x86.

Просто для пояснения, единственный раз, когда программа не будет запускаться, это когда я использую ярлык в меню Пуск, а exe и все частисохраненные в папке Program Files (x86)

Plasticsabers действительно помогли мне понять проблему, и я смог ее исправить.Это не проблема Vista и XP, это проблема 32-битной ОС против 64-битной.

Мне нужно работать на 64-битной XP и 32-битной Win7.

1 Ответ

0 голосов
/ 28 июля 2011

В соответствии с этой запиской папка Program Files (x86) специально предназначена для 32-битных программных файлов, в отличие от папки Program Files, которая предназначена для 64-битных программ.

Но для того, чтобы 32-разрядная программа притворилась, что она находится на 32-разрядной машине, имя рабочего каталога должно быть возвращено как «Program Files», потому что это то же самое, что и на 32-разрядной.бит машина.Это то, что вы видите, когда спрашиваете Windows о рабочем каталоге с помощью getcwd ().Поскольку ваша программа пытается использовать это имя каталога в пути, а на самом деле это не путь к файлу на реальной 64-разрядной машине, она ломается.

Просмотр документов WOW64 , я подозреваю, что причина, по которой он ломается только при запуске из меню «Пуск», заключается в том, что это экземпляр 64-битного процесса, создающего 32-битный процесс, который заставляет систему изменять переменную среды ProgramFiles.В случае, если вы дважды щелкнете по нему для запуска, это 32-битный процесс с самого начала.

Кажется, вы не единственный, кто столкнулся с этим; этот Windows API , кажется, разработан специально для решения проблемы, которую вы описываете.Если ничто иное не предполагает, что поведение, которое вы видите, является умышленным.

Но это академично.Чтобы оградить себя от подобных вещей, я бы получил абсолютный путь к вашему exe, используя что-то вроде os.path.realpath(__file__), и пошел бы оттуда.

...