2017-06-02 39 views
0

我堅持調試gpgme。 當我將日誌級別升至9時,我會得到發生錯誤的確切位置。gpgme_op_export_keys無效值

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.dlllibgpgme-11.dll

當我將我的整個安裝複製到同一個文件夾中時,相同的調用運行時沒有錯誤。

這使我相信有一個背景設置運行時,我加載庫。閱讀dokumentationgpgme_set_global_flag我可以看到有一些條目引用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後的階段失敗。我調查的原因還是一樣的。

回答

0

標準安裝的路徑包含空格。

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

看起來好像沒有通過gpgme正確處理。它看起來像一個CreateProcess調用的路徑不包裝。

作爲修補程序,我將gpgconf.exe添加到自定義客戶端的執行路徑。

gpgme對該文件首先檢測到該文件。

這樣當調用CreateProcess時,路徑中沒有空格,並且調用成功。

它只是一個熱修復程序,因爲我的客戶現在需要確保他沒有將我的應用程序安裝到具有空格的路徑中。


編輯:再次沒有標記。它工作了一段時間,現在gpgme已經停止呼叫gpgconf.exe。所以自然現在有一個不同的錯誤。


....現在一切又突然變好了。

所以我想用falkey體驗唯一正確的解決方案就是把整個事情拋出窗外。