我的问题是:我使用鬼怪脚本将一些pdfs转换成jpeg文件,然后将它们呈现到silverlight控件中。我正在使用以下方法转换pdf文件:
public void PdfToJpg(string ghostScriptPath, string input, string output) {
timer1.Enabled = true;
//if the pdf has more than 1 file (ex. 3) then 3 jpeg files will be outputed
String ars = "-dNOPAUSE -sDEVICE=jpeg -r300 -o" + output + "-%d.jpeg " + input;
ProcessStartInfo startInfo = new ProcessStartInfo();
startInfo.WindowStyle = ProcessWindowStyle.Hidden;
startInfo.Arguments = ars;
startInfo.FileName = ghostScriptPath;
startInfo.WindowStyle = ProcessWindowStyle.Hidden;
using (Process exeProcess = Process.Start(startInfo)) {
exeProcess.WaitForExit();
}
}然后将页码和页面byte[]保存到字典、会话中的字典中,并使用启用silverlight的服务将其发送到包含silverlight控件的aspx页(使用Response.redirect(page.aspx))。一切运行良好,但有时服务器(Cassini或IIS)崩溃,这意味着文件被转换,但重定向永远不会发生,页面只是停留在加载状态。我必须用"End Process“关闭cassini,或者重新启动IIS服务器,这样进程才能再次工作。我不认为这个服务有问题,因为我有一个类似的过程要发送给silverlight应用程序,一个音频文件的byte[],一切都很好,服务器永远不会卡住,所以我认为这是因为幽灵脚本.如果有人有想法的话。另外,我正在使用elmah,没有错误报告.在调试过程中,当我单击包含转换和进程其他部分的视图按钮时,它不会输入click事件,但是转换已经完成(而不是重定向),我不知道这怎么可能.,谢谢。所以肯定是有鬼脚本的
更新:我将代码更改为:
using (Process convertProc = new Process()) {
convertProc.StartInfo.FileName = ghostScriptPath;
convertProc.StartInfo.Arguments = args;
//convertProc.StartInfo.UseShellExecute = false;
//convertProc.StartInfo.RedirectStandardOutput = true;
convertProc.StartInfo.CreateNoWindow = true;
convertProc.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
convertProc.Start();
ThreadedKill(convertProc.Id);
convertProc.PriorityClass = ProcessPriorityClass.Normal;
convertProc.WaitForExit();
}如果注释了useshellexecute和redirectoutput,服务器有时会变得“疯狂”,如果不是的话,代码每一次都运行得很完美,但是有了这个,幽灵脚本进程的窗口就出现了,我不想这样做。为了不出现,我必须注释这些行,或者将useshellexecute改为true,并注释重定向输出,这有时会导致失败。我能做什么?redirectStandardOutput是什么,它是什么.,dind不明白在MSDN上.
更新2:将控制台应用程序的showing 64.exe改为gswin64c.exe,而现在我所说的窗口不再显示了。没有代码发狂.至少还没有..。
发布于 2012-09-10 14:56:11
首先,您不需要-dNOPAUSE,因为-o意味着-dBATCH和-dNOPAUSE,但它并不有害。
这个问题是“间歇性的”吗?或者如果您发送一个挂起的文件(服务器崩溃?)重复:它是每次挂起,还是更频繁地挂在特定的文件中?
如果这确实是断断续续的,那就不太可能是Ghostscript。
要将stdout和stderr从Ghostscript捕获到文件中,可以添加-sstdout=___.out和-sstderr=___.err,以查看Ghostscript是否有抱怨。如果您总是写入相同的文件,错误后的内容将告诉您是否有任何消息是由gswin*.exe生成的。
添加-Z:也将向Ghostscript输出添加一些计时信息。
注意,由于您使用-r300进行JPEG输出:如果Ghostscript意外停止,则临时目录中将有两个以te_开头并具有.tmp扩展名的文件。这些文件是为用于显带的基于磁盘的“clist”文件创建的(300 dpi字母大小页的大小足以超过默认的-dMaxBitmap=____值8m)。
如果您没有在临时文件夹中看到te_XXXXX.tmp文件的积累,那么Ghostscript (可能)不会崩溃。
https://stackoverflow.com/questions/12346646
复制相似问题