Сборка Com-сервера с использованием Python на 64-битной машине с Windows 7 - PullRequest
3 голосов
/ 03 января 2011

Оригинальный пост здесь: http://mail.python.org/pipermail/python-win32/2010-December/011011.html

Я использую:

  • ОС: 64-битная Windows 7 Professional
  • Python: python-2.7.1.amd64
  • Python Win32 расширения: pywin32-214.win-amd64-py2.7
  • Py2exe: py2exe-0.6.9.win64-py2.7.amd64

Я пытаюсь создать наложение иконок для Windows. Он работал нормально на 32 бит Windows, но не работает на 64-битной Windows 7.

Вот модули Python, которые я создал для тестирования:

  1. test_icon_overlay.py: (http://mail.python.org/pipermail/python-win32/attachments/20101229/bb8c78a4/attachment-0002.obj) com-сервер, созданный в Python для наложения значков, который добавляет значок наложения флажка (C: \ icons \ test.ico) в папку "C: \ icons"

  2. setup_VI.py: (http://mail.python.org/pipermail/python-win32/attachments/20101229/bb8c78a4/attachment-0003.obj) установочный файл, который создает test_icon_overlay.dll для распределение.

  3. icons.zip: (http://mail.python.org/pipermail/python-win32/attachments/20101229/bb8c78a4/attachment-0001.zip) для тестирования вы должны извлечь icons.zip внутри C: \

Значок наложения появляется в папке C:\icons при выполнении python test_icon_overlay.py в командной строке Windows и перезапуске explorer.exe. Но он не работает с файлом DLL, созданным с использованием setup_VI.py

Я создал файл DLL, используя python setup_VI.py py2exe, а затем попытался зарегистрируйте его, используя regsvr32 test_icon_overlay.dll. Сбой регистрации с Сообщение об ошибке Windows Error 0x80040201 while registering shell extension.

Затем я включил регистратор в Python27/Lib/site-packages/py2exe/boot_com_servers.py, и вот трассировка, которую я получаю в comerror.txt на regsvr32 test_icon_overlay.dll

PATH is ['C:\\root\\avalon\\module\\sync\\python\\src\\dist\\library.zip']
Traceback (most recent call last):
  File "boot_com_servers.py", line 37, in <module>
pywintypes.error: (126, 'GetModuleFileName', 'The specified module could not
be found.')
Traceback (most recent call last):
  File "<string>", line 1, in <module>
NameError: name 'DllRegisterServer' is not defined

Похоже, что может быть проблема с win32api.GetModuleFileName(sys.frozendllhandle) или сборкой dll на 64-битной Windows 7.

Кроме того, я увидел, что установка pywin32-214.win-amd64-py2.7 на 64-битной Windows 7 завершается с сообщением об ошибке: Снимок

close failed in file object destructor:
sys.excepthook is missing
lost sys.stderr

Есть что-то, что я делаю неправильно? Любая помощь по этому вопросу очень оценили.

1 Ответ

5 голосов
/ 07 января 2011

В py2exe есть ошибка в 64-битном Python. Файл sys.frozendllhandle, инициализированный py2exe, недопустим, так что win32api.GetModuleFileName (sys.frozendllhandle) завершается ошибкой.

Возможно, вы захотите попробовать исправленные установщики py2exe на http://www.lfd.uci.edu/~gohlke/pythonlibs/#py2exe

...