gpgme_op_export_keys无效值

时间:2017-06-02 14:36:31

标签: gpgme

我很难调试gpgme。 当我将loglevel转到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>

我有一个使用gpgme的c ++库。当我在Boost.Test应用程序中使用库时,不会发生错误。当我在C#应用程序中使用该库时,会发生错误。

我正在做的是从我的密钥环导出一个私有的ascii装甲密钥。 它始终是相同的指纹。我可以从哪里开始,有什么东西需要在gpgme上验证才能找到差异吗?

编辑: 我有关于该问题的其他信息。 我用我的应用程序重新分发一些gpgme文件。 即:libassuan-0.dlllibgpg-error-0.dlllibgpgme-11.dll

当我将整个安装复制到同一个文件夹中时,相同的调用运行时没有错误。

这让我相信在加载库时会运行后台设置。阅读gpgme_set_global_flag的{​​{3}}我可以看到有些条目引用gpgconf

我需要导出什么才能允许使用繁荣配置运行我的应用程序?

编辑2: gpgme.log与成功运行不同,在temprorary文件夹创建中运行失败。

好:

_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 个答案:

答案 0 :(得分:0)

标准安装的路径包含空格。

C:\Program Files (x86)\GNU\GnuPG\gpgconf.exe

似乎gpgme没有正确处理。看起来路径没有为CreateProcess电话包裹。

作为修补程序,我将gpgconf.exe添加到自定义客户端的执行路径中。

gpgme检测到该文件首先在此路径中查找。

这样,当调用CreateProcess时,路径中没有空格,并且调用成功。

这只是一个修补程序,因为我的客户现在需要确保他没有在带有空格的路径中安装我的应用程序。

编辑:再次取消标记。它工作了一段时间,现在gpgme已停止拨打gpgconf.exe。所以现在自然会有一个不同的错误。

....现在一切都突然好了。

因此,我认为唯一正确的解决方案是将falkey体验抛到窗外。