gpgme_op_export_keys Неверное значение
Я застрял с отладкой gpgme. Когда я поворачиваю лог-уровень до 9, я получаю точное местоположение, где происходит ошибка.
GPGME 2017-06-02 16:25:42 <0x3968> gpgme_op_export_keys: enter: ctx=08A19D68, mode=0x10, keydata=089C4578
GPGME 2017-06-02 16:25:42 <0x3968> gpgme_op_export_keys: check: ctx=08A19D68, keys[0] = 089C4190 (9E799EB266729E930BE7A22B7650B73C8AD5436D)
GPGME 2017-06-02 16:25:42 <0x3968> gpgme_op_export_keys: error: Invalid value <GPGME>
У меня есть библиотека C++, которая использует gpgme. Когда я использую библиотеку в приложении Boost.Test, ошибка не возникает. Когда я использую библиотеку в приложении C#, возникает ошибка.
Что я делаю, так это экспортирую частный бронированный ключ ASCII из моего набора ключей. Это всегда один и тот же отпечаток пальца. Куда я могу пойти отсюда, есть ли вещи, которые мне нужно проверить на gpgme, чтобы найти различия?
РЕДАКТИРОВАТЬ: У меня есть дополнительная информация об этой проблеме. Я распространяю некоторые файлы gpgme с моим приложением. А именно: libassuan-0.dll
, libgpg-error-0.dll
, libgpgme-11.dll
,
Когда я вместо этого копирую всю свою установку в одну и ту же папку, те же самые звонки выполняются без ошибок.
Это наводит меня на мысль, что при загрузке библиотек выполняется фоновая настройка. Чтение документации для gpgme_set_global_flag
я могу видеть, что есть некоторые записи, которые ссылаются на gpgconf
,
Что мне нужно экспортировать, чтобы разрешить запуск моего приложения с правильной конфигурацией?
РЕДАКТИРОВАТЬ 2: gpgme.log отличается от успешного запуска на неудачный запуск создания временной папки.
хорошо:
_gpgme_io_spawn: check: path=00444FB8, CreateProcess ready: hProcess=000005D0, hThread=000005CC, dwProcessID=6184, dwThreadId=16268
плохой:
_gpgme_io_spawn: check: path=001850E8, CreateProcess failed: ec=87
Обе папки следуют примерно одинаковой схеме именования. Я не уверен, что здесь не так.
РЕДАКТИРОВАТЬ: я медленно доведен до безумия. Настройка кажется недетерминированной. Время от времени настраивает функции, как ожидалось. Иногда это не так. Я удостоверился, что у меня есть последние библиотеки - установил gpg4win и скопировал оттуда библиотеки - теперь в журнале отладки либо не отображаются записи отладки, либо gpg прекратил искать пути все вместе. Теперь это терпит неудачу на более позднем этапе, когда я пытаюсь использовать OpenPGP. Я считаю, причина все та же.
1 ответ
Путь стандартной установки содержит пробелы.
C:\Program Files (x86)\GNU\GnuPG\gpgconf.exe
Похоже, что это не правильно обрабатывается gpgme. Похоже, путь не обернут для CreateProcess
вызов.
В качестве исправления я добавил gpgconf.exe
к пути выполнения моего собственного клиента.
gpgme
имеет обнаружение для этого файла, который сначала ищет по этому пути.
Таким образом, когда CreateProcess
вызывается, в пути нет пробелов, и вызов завершается успешно.
Это только исправление, так как теперь мой клиент должен быть уверен, что он не установит мое приложение по пути с пробелами.
РЕДАКТИРОВАТЬ: снова не отмечены. Это работало некоторое время, и теперь gpgme перестал звонить gpgconf.exe
, Поэтому, естественно, теперь есть другая ошибка.
.... и теперь все снова прекрасно.
Так что я думаю, что единственно правильное решение с ложным опытом - выбросить все это в окно.