Ошибка загрузки DLL в пути с круглыми скобками с использованием ctypes (python) - PullRequest
5 голосов
/ 25 февраля 2010

Я пытаюсь получить доступ к DLL, находящейся в папке "c: / Program Files (x86)" на 64-битном процессорном ПК.

Если я использую os.path.exists для проверки существования dll, я получу утвердительный ответ:

>>> print os.path.exists('c:/Program Files (x86)/Some Folder/SomeDll.dll')
True

Но когда я пытаюсь загрузить dll, используя ctypes, я получаю следующую ошибку:

>>> from ctypes import WinDLL
>>> some_dll = WinDLL('c:/Program Files (x86)/Some Folder/SomeDLL.dll')
Traceback (most recent call last):
  File "<console>", line 1, in <module>
  File "C:\Python26\lib\ctypes\__init__.py", line 353, in __init__
    self._handle = _dlopen(self._name, mode)
WindowsError: [Error 126] The specified module could not be found

На 32-битных ПК dll находится в папке "c: / Program Files", и я могу открыть ее без проблем. Я думаю, что, возможно, проблема заключается в наличии круглых скобок в имени папки. Поскольку возвращаемое исключение было WindowsError, похоже, что это ошибка в функции операционной системы, отвечающая за загрузку библиотек.

Итак, вопрос: как мне загрузить dll, находящуюся в папке "c: / Program Files (x86)"? Я не могу скопировать dll в другой пункт назначения, он должен находиться в исходном пути ...

Спасибо!

Ответы [ 2 ]

7 голосов
/ 25 февраля 2010

Вы пробовали "C: / Progra ~ 1 / SomeFolder / SomeDll"?

Еще одно предложение:

 os.chdir(r"C:\Program Files(x86)\SomeFolder")
 the_dll = WinDLL("SomeDLL.dll")      
0 голосов
/ 30 января 2019

Извините, у меня нет 50 повторений для комментария (требование STUPID), но /Program Files (x86)/ это просто Progra~2, в то время как /Program Files/ это Progra~1 На всякий случай, если Фелипе Ферри читает это снова :) или кто-то еще пытается сделать то же самое.
ПРИМЕЧАНИЕ: это также предполагает, что у вас нет другой длинной папки, начинающейся с Progra, если это так, это может изменить ваш результат - вы в основном выбираете из массива каталогов в алфавитном порядке - это работает с любой папкой (папками) дольше чем 8 символов, вы снимаете последние два и добавляете ~ 1 для первого и увеличиваете для каждой другой папки с тем же набором символов.

...