我有一个用C#编写的服务。运行以下代码:
public static bool PrintPDF(string ghostScriptPath, int numberOfCopies, string printerName, string pdfFileName)
{
ProcessStartInfo startInfo = new ProcessStartInfo();
startInfo.Arguments = $@"-dPrinted -dNoCancel=true -dBATCH -dNOPAUSE -dNOSAFER -q -dNumCopies={numberOfCopies} -sDEVICE=mswinpr2 -sOutputFile=""\\spool\{printerName}"" ""{pdfFileName}""";
startInfo.FileName = Path.Combine(ghostScriptPath, "gswin64c.exe");
startInfo.UseShellExecute = false;
startInfo.CreateNoWindow = true;
startInfo.RedirectStandardError = true;
startInfo.RedirectStandardOutput = true;
Process process = Process.Start(startInfo);
Console.WriteLine(process.StandardError.ReadToEnd() + process.StandardOutput.ReadToEnd());
process.WaitForExit(30000);
if (process.HasExited == false) process.Kill();
return process.ExitCode == 0;
}
在Windows服务之外,它没有任何问题。 在服务内部,当作为本地系统运行时,GhostScript开始运行但没有任何输出超时。
经过一番摆弄后,我终于将服务切换为网络服务,并将网络服务设置为服务器exe和GhostScript exe所在文件夹的所有者(在我这样做之前,我得到了拒绝访问错误) - 现在服务运行良好。
我的问题是 - 为什么网络服务可以在本地系统无法工作的地方工作?我认为Local System有更多特权。而且,我怎样才能获得有关实际问题的更多信息?我找到了一个解决方法,但它只是一个在黑暗中的幸运镜头。我不知道真正的问题是什么。
更多信息: 运行Windows 10 64位,并使用GhostScript v9.29
答案 0 :(得分:0)
您需要在专用于其的本地用户帐户下运行该服务。 您还需要一次在列表中与该用户登录,以便填充打印机列表!