我正在使用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());
答案 0 :(得分:0)
GnuPG管理每个用户的GnuPG主目录。如果以本地用户身份导入密钥(在开发/调试时),它们将导入到本地用户的主目录。如果您稍后将其作为系统服务运行,则定义为服务所有者的用户可能是另一个用户,并且无法访问您本地用户的主目录。
可能的解决方案:
GNUPGHOME
环境变量或--homedir
参数为应用程序定义固定的主目录。请注意,默认情况下GnuPG对文件夹的权限相当挑剔,如果您不确定其含义,请不要更改此内容。