Проблема с DLL после компиляции с помощью cx_freeze при использовании импорта из win32 wnet - PullRequest
0 голосов
/ 26 марта 2020

Я создаю сценарий, который подключается к сетевой папке с указанием c имени пользователя и пароля, которые я не даю пользователю. Этот сценарий соединяется с сетевой папкой в ​​течение 1 или 2 секунд, делает что-то и отключается после этого, чтобы убедиться, что пользователь не сможет получить доступ к сетевой папке после этого.

Я отлично работаю в своей среде разработки. Я использую cx_Freeze, чтобы конвертировать мой .py в .exe (я использую его для другой маленькой программы много раз)

Проблема в том, что файл .exe работает нормально только на том же P C, где я разрабатываю свое приложение , На всех других P C это выдает мне ошибку: Файл "network.py", строка 1, в ImportError: Ошибка загрузки DLL: Le модуль spécifié est introuvable (в engli sh он не может найти указанный модуль)

Пытаюсь добавить DLL win32 wnet. но не работает.

Что я делаю не так.

См. Мой код и мой код импорта

'' '

import win32wnet
import os
import re

# configure initial parameter
shareFolder = "\\\\ultra\\circuit-bgo"
usager = "foo"
motPasse = "foo"


# use win32wnet to create resorce to connect or disconnect
net_resource = win32wnet.NETRESOURCE()
net_resource.lpRemoteName = shareFolder


# try to disconnect to be sure no connection steel exist
try:
    win32wnet.WNetCancelConnection2(net_resource.lpRemoteName,0,0)
except:
    pass

# create connection to network folder
laConnection = win32wnet.WNetAddConnection2(net_resource, motPasse, usager, 0)


if os.path.exists(net_resource.lpRemoteName):
    print("connection réussi")
    # do some stuff, like read write and modify some files ( 1 or 2 secondes )
else:
    print("connection ÉCHOUÉ")
    # opps, connection failed

# disconnect to the network folder. I don't want user can access the folder by itself
try:
    win32wnet.WNetCancelConnection2(net_resource.lpRemoteName,0,0)
except:
    pass

' ''

Импортируйте код с помощью cx_freeze

'' '

import os
import sys
from cx_Freeze import setup, Executable

base = None
if sys.platform == 'win32':
    base = 'Win32GUI'

#syspath = "c:\\Python32\\Lib\\site-packages\\win32\\perfmondata.dll"

buildOptions = dict(
    packages=['win32wnet'],
    excludes=[],
    include_files=['perfmondata.dll',]
)

executables = [Executable('network.py', base=base)]

setup(name='TestNetwork',
      version='0.1',
      options=dict(build_exe=buildOptions),
      description='NetWork',
      executables=executables
      )

' ''

и я пробую код basi c, когда я обычно компилирую с помощью cx_freeze

это командный файл:

cxfreeze.bat "c: / Python32 / Scripts / network.py" --base-name = Win32 GUI --target-dir C : / Python32 / Скрипты / Dist_Network --icon c: / Python32 / Скрипты / Lo go .ico

1 Ответ

0 голосов
/ 26 марта 2020

После многих, многих, многих испытаний и переустановки python и модуля мне нужно найти DLL, которая доставляет мне проблемы. Я обнаружил, что 3 DLL-файла должны быть скопированы в одну и ту же папку моего нового .exe-файла (программы). Эти 3 DLL-файла: pythoncom32.dll, pythoncomloader32.dll и pywintypes32.dll. Эти файлы можно найти в c: \ Windows \ syswow64 или system32 в зависимости от вашей установки python (32-разрядная или 64-разрядная)

Если у вас есть другое решение, вы можете добавить его.

Спасибо

...