在 Windows 上从 Apache CGI 运行 gswin64c
Posted
技术标签:
【中文标题】在 Windows 上从 Apache CGI 运行 gswin64c【英文标题】:Running gswin64c from an Apache CGI on Windows 【发布时间】:2020-10-10 12:52:02 【问题描述】:我正在尝试从 Apache for Windows 上的 CGI 运行 gswin64c.exe
。我的程序调用gswin64c.exe
(我可以在任务管理器中看到它)但它永远挂在那里。
我的 Lazarus (FreePascal) 程序这样称呼它:
lProcess.Executable:='C:\Program Files\gs\gs9.27\bin\gswin64c.exe';
lProcess.Options := [poWaitOnExit];
lProcess.Parameters.Add('-dINITDEBUG');
lProcess.Parameters.Add('-dNOSAFER');
lProcess.Parameters.Add('-dNOGC');
lProcess.Parameters.Add('-dNOPAUSE');
lProcess.Parameters.Add('-dBATCH');
lProcess.Parameters.Add('-dDisplayResolution=600');
lProcess.Parameters.Add(lPaperSize);
lProcess.Parameters.Add('-sDEVICE=mswinpr2');
lProcess.Parameters.Add('-sOutputFile="%printer%' + APrinter + '"');
lProcess.Parameters.Add('-sstdout=salida.out');
lProcess.Parameters.Add('-sstderr=salida.err');
lProcess.Parameters.Add(lFile);
如您所见,我添加了-dINITDEBUG
、-sstdout
和-sstderr
参数以将一些信息输出到外部文件。使用以下内容生成文件salida.out
:
START 0 1471928 174522 1310688 29492 true 565 3 <0>
GPL Ghostscript 9.27 (2019-04-04)
Copyright (C) 2018 Artifex Software, Inc. All rights reserved.
This software is supplied under the GNU AGPLv3 and comes with NO WARRANTY:
see the file COPYING for details.
END PROCS 1 1520776 223987 1330888 35436 true 671 3 <0>
END FONTDIR/ENCS 2 1549424 257612 1330888 37932 true 681 3 <0>
END DEVS 2 1589024 292939 1330888 37932 true 685 3 <0>
END STATD 3 1609224 310667 1330888 40828 true 690 3 <0>
END GS_FONTS 5 1678272 386498 1330888 40828 true 719 3 <0>
END BASIC COLOR 5 1698472 396103 1330888 40828 true 735 3 <0>
END IMAGE 6 1698472 404147 1330888 40828 true 740 3 <0>
BEGIN RESOURCES 15 2541832 1191647 1436040 146700 true 761 4 <0>
END CATEGORY 15 2541832 1195766 1436040 146996 true 762 5 <0>
END GENERIC 16 2572068 1220038 1436040 146996 true 764 4 <0>
END FIXED 17 2592268 1237641 1436040 146996 true 764 4 <0>
END MISC 17 2592268 1249425 1436040 146996 true 764 4 <0>
END ENCODING 18 2652868 1306819 1436040 150634 true 764 4 <0>
END INITFILES 41 4054488 2645409 1436040 153496 true 982 4 <0>
C:\Program Files\gs\gs9.27\bin/Fontmap 42 4054488 2650897 1456240 158774 true 983 4 <1>
C:\Program Files\gs\gs9.27\lib/Fontmap 43 4115088 2687451 1456240 158774 true 983 4 <1>
C:\Program Files\gs\gs9.27\fonts/Fontmap 43 4115088 2698191 1456240 158774 true 983 4 <1>
%rom%Resource/Init/Fontmap 44 4135288 2712349 1456240 158774 true 983 4 <1>
%rom%lib/Fontmap 45 4155488 2730865 1456240 158774 true 983 4 <1>
c:/gs/gs9.27/Resource/Init/Fontmap 46 4175688 2745031 1456240 158774 true 983 4 <1>
c:/gs/gs9.27/lib/Fontmap 46 4175688 2755755 1456240 158774 true 983 4 <1>
c:/gs/gs9.27/Resource/Font/Fontmap 47 4195888 2769921 1456240 158774 true 983 4 <1>
c:/gs/fonts/Fontmap 47 4216088 2784072 1456240 158774 true 983 4 <1>
END FONTS 48 4216088 2794885 1456240 158774 true 982 4 <0>
但没有别的。
顺便说一句,我使用完全相同的参数创建了一个命令行程序,它按预期工作。
有人在 Windows 上使用 Apache2 CGI 中的gswin64c
遇到过类似问题吗?
注意:在这里提问之前,我在 Lazarus 论坛上创建了一个长线程,请参阅:https://forum.lazarus.freepascal.org/index.php/topic,51727.0.html
【问题讨论】:
【参考方案1】:我目前面临同样的问题。我正在尝试使用 gswin64c 从 Apache 服务器上的 PHP 将 PDF 发送到打印机。只要我使用自己的用户帐户运行 Apache,它就可以正常工作,但是如果 Apache 作为服务运行(在 Windows 中,使用 SYSTEM 帐户),它就不再起作用。永远挂起。
如果您通过“psexec -sid”运行 gswin64c,如此处所示 (https://www.winhelponline.com/blog/run-program-as-system-localsystem-account-windows/),您将看到以 SYSTEM 帐户运行时未选择打印机。在我的系统上,至少 SYSTEM 帐户可以看到打印机。我还不知道为什么它拒绝选择它。
我最终在我的场景中解决了这个问题,方法是完全删除 gswin64c.exe 并编写一个小型 C#/.NET Core 程序,该程序可以将 PDF 文件从命令行参数发送到打印机,使用此处详述的示例: https://www.dynamicpdf.com/examples/print-pdf-.net-core?filter=print&gclid=Cj0KCQjwuL_8BRCXARIsAGiC51D8XVS2WxFWgoLir5Mg4W3A22NIEQtFlUSkJqTsCDnfsGfUpQy_7mwaAoTyEALw_wcB
【讨论】:
以上是关于在 Windows 上从 Apache CGI 运行 gswin64c的主要内容,如果未能解决你的问题,请参考以下文章