2011-01-03 2 views
3

Оригинальный пост здесь: http://mail.python.org/pipermail/python-win32/2010-December/011011.htmlCom сервер сборки с помощью Python на 64-битной ОС Windows 7 машина

Я использую:

  • ОС: 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: \ значки \ test.ico) на "C: \" иконки папки

  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. Но ее не работает с файлом длл создана при setup_VI.py

я создал файл DLL с помощью python setup_VI.py py2exe, а затем попытался зарегистрировать его с помощью regsvr32 test_icon_overlay.dll. Ошибка регистрации с сообщением об ошибке 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) или с длл сборки на 64-битных ОС Windows 7.

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

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

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

+1

Когда вы говорите, он работает на 32-битной Windows, является то, что 32-разрядная версия Windows 7 или более старой версии как Windows XP? Если вы не пробовали 32-разрядную версию той же ОС, где 64-разрядная версия не работает, проблема может быть не в 64-битной вообще. Например, если он работает в XP, но не Win7, то это может быть связано с UAC. –

+0

Я протестировал dll, сгенерированный в 32-разрядной Windows XP на 32-разрядной Windows XP, Vista и Win7, и наложение значков отлично работает на каждой ОС. Но 64-разрядная dll, созданная на 64-разрядной Windows XP/Win7, вообще не работала на 64-разрядной машине XP/Win7. Регистрация dll не удалась на 64-битной машине. –

+0

Возможно, это глупый вопрос, но при выполнении regsvr32 окно cmd запускается с правами администратора, не так ли? – Mark

ответ

5

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

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

+0

Где я могу увидеть фактический патч для py2exe? –

+2

Я отправил исправление на https://sourceforge.net/tracker/index.php?func=detail&aid=3152707&group_id=15583&atid=115583 – cgohlke

+0

Спасибо! Теперь работает. –