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, Поэтому, естественно, теперь есть другая ошибка.


.... и теперь все снова прекрасно.

Так что я думаю, что единственно правильное решение с ложным опытом - выбросить все это в окно.

Другие вопросы по тегам