2016-02-26 4 views
1

Я использую gpg (GnuPG) для шифрования CSV-файла в файл .gpg. Приведенный ниже код генерирует зашифрованный файл в режиме отладки. Когда я устанавливаю под управлением Windows, это бросает исключение. "Gpg: <> C: \ emp.csv: skipped: Нет открытого ключа gpg: [stdin]: ошибка шифрования: нет открытого ключа". Its работает при запуске службы в режиме отладки, как «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 по умолчанию довольно придирчив к разрешениям папки, и если вы не очень уверены в этом, не изменяйте ничего об этом.