Asp.net IIS 8上的GhostScript.NET GSPrint权限

Asp.net IIS 8上的GhostScript.NET GSPrint权限,asp.net,iis,ghostscript.net,Asp.net,Iis,Ghostscript.net,我已经在我的应用程序中添加了一个GhostScript.NET,并且能够在本地机器上使用GSPrint成功打印PDF。不幸的是,在将更新后的应用程序部署到服务器以及安装GSView(包括GSPrint)之后,打印功能只是挂起,没有任何错误 我的第一个猜测是,既然我写文件系统是为了让GSPrint打印文件,那么它与访问安全权限有关。我正在windows server 2012上使用IIS 8。如果有人对部署GSPrint或如何解决此问题有任何经验,我将不胜感激 代码如下: public stat

我已经在我的应用程序中添加了一个GhostScript.NET,并且能够在本地机器上使用GSPrint成功打印PDF。不幸的是,在将更新后的应用程序部署到服务器以及安装GSView(包括GSPrint)之后,打印功能只是挂起,没有任何错误

我的第一个猜测是,既然我写文件系统是为了让GSPrint打印文件,那么它与访问安全权限有关。我正在windows server 2012上使用IIS 8。如果有人对部署GSPrint或如何解决此问题有任何经验,我将不胜感激

代码如下:

 public static void PrintingQueue(Queue<byte[]> printQueue, string printer, int copies)
    {
        Parallel.ForEach(printQueue, (currentFile) =>
        {
            PrintWithGSPrint(currentFile, printer, copies);
        });
        printQueue.Clear();
    }

    private static void PrintWithGSPrint(byte[] pdfFormBytes, string printer, int copies)
    {
        try
        {
            var fileName = Path.GetTempFileName();
            using (var file = new FileStream(fileName, FileMode.Create, FileAccess.ReadWrite))
            {
                file.Write(pdfFormBytes, 0, pdfFormBytes.Length);
                //this uses GSPrint, which console commands are different from vanilla ghostscript.
                var gsArguments = $"-noquery -portrait -printer\"{printer}\" \"{fileName}\"";
                var gsLocation = @"C:\Program Files\Ghostgum\gsview\gsprint.exe";

                var gsProcessInfo = new ProcessStartInfo
                {
                    WindowStyle = ProcessWindowStyle.Hidden,
                    FileName = gsLocation,
                    Arguments = gsArguments
                };

                var gsProcess = Process.Start(gsProcessInfo);
                gsProcess.WaitForExit();
                file.Close();
            }
            File.Delete(fileName);
        }
        catch (Exception ex)
        {
            Console.WriteLine(ex.Message);
        }
    }
公共静态无效打印队列(队列打印队列、字符串打印机、整数副本)
{
Parallel.ForEach(打印队列,(当前文件)=>
{
使用gsprint打印(当前文件、打印机、副本);
});
printQueue.Clear();
}
使用GSPRINT的专用静态无效打印(字节[]pdfforBytes,字符串打印机,整型副本)
{
尝试
{
var fileName=Path.GetTempFileName();
使用(var file=newfilestream(文件名,FileMode.Create,FileAccess.ReadWrite))
{
写入(pdfforBytes,0,pdfforBytes.Length);
//这将使用GSPrint,它的控制台命令不同于普通的ghostscript。
var gsArguments=$”-noquery-grait-printer\“{printer}\”{fileName}\”;
var gsLocation=@“C:\Program Files\Ghostgum\gsview\gsprint.exe”;
var gsProcessInfo=new ProcessStartInfo
{
WindowsStyle=ProcessWindowsStyle.Hidden,
FileName=gsLocation,
Arguments=gsArguments
};
var gsProcess=Process.Start(gsProcessInfo);
gsProcess.WaitForExit();
file.Close();
}
删除(文件名);
}
捕获(例外情况除外)
{
控制台写入线(例如消息);
}
}

Ghostscript.NET是一个简单的Ghostscript包装器。我在你的代码中没有看到任何东西告诉我你使用Ghostscript.NET.Nope,这似乎是对gsprint.exe的调用,它是GSView 5的一部分,由GumTree软件在澳大利亚开发。它使用Ghostscript,但不使用Ghostscript.NET。它实际上也不受支持,特别是对免费用户。我对.NET了解不多,但如果出现文件权限错误,我不希望文件系统write()挂起。