我一直在调试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.dll,libgpg-error-0.dll,libgpgme-11.dll。
当我将整个安装复制到同一个文件夹中时,相同的调用都会运行,而不会出现错误。
这使我相信,当我加载库时,有一个后台设置正在运行。阅读涂鸦 for gpgme_set_global_flag,我可以看到有一些条目可以重新呈现给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时,它会在稍后阶段失败。我查了一下原因还是一样的。
发布于 2017-06-07 11:14:05
标准安装的路径包含空格。
C:\Program Files (x86)\GNU\GnuPG\gpgconf.exe这似乎是gpgme没有正确处理的。看起来路径不是为CreateProcess调用而包装的。
作为一个修补程序,我将gpgconf.exe添加到自定义客户端的执行路径中。
gpgme对该文件进行了检测,该文件首先在此路径中查找。
这样,当调用CreateProcess时,路径中没有空格,调用成功。
这只是一个修补程序,因为我的客户现在需要确保他没有在带有空格的路径中安装我的应用程序。
编辑:再次取消标记。它工作了一段时间,现在gpgme已经停止调用gpgconf.exe了。所以很自然,现在有一种不同的bug。
....and现在一切都好起来了。
所以我想唯一正确的解决办法就是把整件事扔出窗外。
https://stackoverflow.com/questions/44331502
复制相似问题