#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 из службы.