Сервисы Windows с Python и py2exe

Мне нужна помощь с преобразованием службы Windows Python с помощью py2exe.

Позвольте мне объяснить проблему. У меня есть служба Python, которая работает, здесь нет проблем. Я использовал py2exe, чтобы превратить его в исполняемый файл. Я протестировал его, заменив версию службы на Python на эту, и она тоже работает без проблем.

Но когда я перемещаю exe-версию службы на другой компьютер, она зарегистрируется в диспетчере служб, но не запустится с ошибкой: «Система не может найти указанный файл». Отсутствующий файл - это один из написанных мною модулей.

Я немного поигрался с этим и вернулся к машине, на которой я использовал py2exe и где работает exe-версия службы. Я удалил все, что связано с python, все, что было создано py2exe, кроме папки «dist», все, что я мог придумать, было связано с версией службы для python. Версия exe все еще работала (хотя я удалил, среди прочего, те самые файлы, которые предположительно отсутствовали на другой машине).

Пробовал кучу разных вещей, но не могу заставить работать exe-версию. Если у кого-то из вас есть идеи, я буду очень признателен.

P.S: У меня на целевой машине установлена ​​среда выполнения C ++. Вы не можете зарегистрировать сервис без него, и, как я уже сказал, я могу зарегистрировать его, он просто не будет работать.


person Bne    schedule 17.04.2011    source источник
comment
Не слишком знаком с тем, как это работает в Windows, но в Linux вы можете запустить ldd для двоичного файла, чтобы увидеть, от каких динамических библиотек он зависит и где они расположены в файловой системе. Стоит проверить. Фактически, я провел быстрый поиск в Google и нашел это для Windows: dependencywalker.com   -  person AJ.    schedule 17.04.2011


Ответы (2)


Даже если вы преобразовали сценарий .py в exe, служба по-прежнему использует интерпретатор python для запуска самого кода службы. если вы откроете «Службы» и посмотрите на свойства службы, вы должны увидеть что-то вроде - Путь к исполняемому файлу: «C: \ Python27 \ lib \ site-packages \ win32 \ PythonService.exe»

Я предполагаю, что на другом компьютере не установлен Python. если вы хотите иметь возможность запускать эту службу на компьютере без установки python, вам нужно сделать что-то вроде Это, или вы также можете сделать это с помощью cx_freeze

person AmitE    schedule 20.02.2014

http://www.py2exe.org/index.cgi/py2exeAndWindowsServices

Там есть некоторые примечания о модулях, конфликтующих с системными dll Windows. У него была проблема, потому что у него был модуль под названием version, и import version вызвала ошибку приложения.

Вы можете попробовать импортировать win32traceutil в первую очередь в свой сервис. Это должно позволить вам запустить консольное приложение win32traceutil для отображения любого вывода stdout / stderr из службы.

person lambacck    schedule 18.11.2011