C# GPG加密在控制台调试模式下工作,但不在发布模式下(窗口服务)

C# GPG加密在控制台调试模式下工作,但不在发布模式下(窗口服务),c#,encryption,gpgpu,gnupg,gpgme,C#,Encryption,Gpgpu,Gnupg,Gpgme,我正在使用gpg(GnuPG)将.csv文件加密为.gpg文件。 下面的代码是在调试模式下生成加密文件。当我在windows服务下安装时,它会引发异常。“gpg:C:\emp.csv:跳过:没有公钥 gpg:[stdin]:加密失败:没有公钥”。 当我在调试模式下运行服务(如“consoleapp.exe-c”)时,它会工作 string arguments = string.Format(" --yes --quiet --always-trust -e -o {0} -

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

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

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

可能的解决办法:

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

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

可能的解决办法:

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

对C:根目录的写入权限受到限制,请尝试在其他地方写入输出。如果对C:根目录的写入权限受到限制,请尝试在其他地方写入输出