2016-02-26 88 views
1

我正在使用gpg(GnuPG)將.csv文件加密爲.gpg文件。 以下代碼在調試模式下生成加密文件。當我在Windows服務下安裝時,它會拋出異常。 「gpg:<> C:\ emp.csv:跳過:沒有公鑰 gpg:[stdin]:加密失敗:沒有公鑰」。當我在調試模式,如「consoleapp.exe -c」運行服務 其工作GPG加密在控制檯調試模式下工作,但不在發佈模式下(窗口服務)

  string arguments = string.Format(" --yes --quiet --always-trust -e -o {0} -r \"{1}\" {2}", "C:\\emp.gpg", "KeyName", "C:\\emp.csv"); 

      ProcessStartInfo pInfo = new ProcessStartInfo(@"C:\Program Files (x86)\GNU\GnuPG\gpg2", arguments); 
      pInfo.WorkingDirectory = @"C:\Program Files (x86)\GNU\GnuPG\"; 
      pInfo.CreateNoWindow = false; 
      pInfo.UseShellExecute = false;    
          pInfo.RedirectStandardInput = true; 
      pInfo.RedirectStandardOutput = true; 
      pInfo.RedirectStandardError = true; 

      Process process = new Process() 
      { 
       StartInfo = pInfo, 
       EnableRaisingEvents = true 
      }; 

      process.Start(); 
      error = process.StandardError.ReadToEnd(); 
      agent.LogConsole(process.StandardOutput.ReadToEnd()); 
+0

對C:的根目錄寫入權限受限制,請嘗試在別處寫入輸出 –

回答

0

的GnuPG管理每個用戶的GnuPG主目錄。如果您將密鑰導入爲本地用戶(開發/調試期間),它們將被導入到本地用戶的主目錄。如果您稍後將其作爲系統服務運行,則定義爲服務所有者的用戶可能是另一個用戶,並且無法訪問您的本地用戶的主目錄。

可能的解決方案:

  • 登錄作爲該服務的用戶,並導入密鑰。
  • 如果您只是在執行加密:在啓動應用程序時導入密鑰。
  • 使用GNUPGHOME環境變量或--homedir參數定義應用程序的固定主目錄。請注意,GnuPG默認情況下會對文件夾的權限進行挑剔,如果您對這些影響不太確定,請不要對此進行任何更改。
相關問題