1

我正在使用 gpg(GnuPG) 将 .csv 文件加密为 .gpg 文件。下面的代码是在调试模式下生成加密文件。当我在 Windows 服务下安装时,它会抛出异常。“gpg: <>C:\emp.csv: 跳过: 没有公钥 gpg: [stdin]: 加密失败: 没有公钥”。当我在“consoleapp.exe -c”等调试模式下运行服务时,它的工作原理</p>

           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());  
4

1 回答 1

0

GnuPG 管理每个用户的 GnuPG 主目录。如果您以本地用户身份导入密钥(在开发/调试时),它们将被导入本地用户的主目录。如果您稍后将其作为系统服务运行,则定义为服务所有者的用户可能是另一个用户,并且无权访问您的本地用户的主目录。

可能的解决方案:

  • 以服务用户身份登录并导入密钥。
  • 如果您只执行加密:启动应用程序时导入密钥。
  • GNUPGHOME使用环境变量或--homedir参数为您的应用程序定义一个固定的主目录。请注意,默认情况下 GnuPG 对文件夹的权限相当挑剔,如果您不太确定其中的含义,请不要对此进行任何更改。
于 2016-02-26T13:53:46.673 回答