Службы Windows с Python и py2exe

#python #windows-services #py2exe

#python #windows-службы #py2exe

Вопрос:

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

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

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

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

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

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

Комментарии:

1. Не слишком знаком с тем, как это работает в Windows, но в Linux вы можете запустить ‘ldd’ для двоичного файла, чтобы увидеть, от каких динамических библиотек это зависит и где они расположены в файловой системе. Это стоило бы проверить. На самом деле, я быстро поискал в Google и нашел это для Windows: dependencywalker.com

Ответ №1:

Даже если вы преобразовали скрипт .py в exe, служба по-прежнему использует интерпретатор python для запуска самого кода службы. если вы откроете «Службы» и посмотрите на свойства службы, вы должны увидеть что-то вроде — Path to executable: «C:Python27libsite-packageswin32PythonService.exe «

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

Ответ №2:

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

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

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