gpgme_op_export_keys 无效值

gpgme_op_export_keys Invalid value

我一直在调试 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>

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

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


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

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

这让我相信当我加载库时有一个后台设置 运行ning。阅读 gpgme_set_global_flagdokumentation 我可以看到有一些条目引用了 gpgconf

我需要导出什么才能使 运行 我的应用程序具有 prosper 配置?

编辑 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 时,它会在稍后阶段失败。我侦察到原因还是一样。

标准安装路径包含空格。

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

gpgme 似乎没有正确处理这个问题。看起来路径没有为 CreateProcess 调用包装。

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

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

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

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


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


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

所以我想如果有 falkey 经验,唯一正确的解决办法就是把所有东西都扔掉 window。