2

我一直在尝试为我用 Java 编写的程序创建一个安装程序,实现 GhostScript,它创建了一个虚拟打印机,文件被发送到。然后我的程序读取文件并进行相应的管理。但是,我必须手动配置 RedMon 重定向端口 (RPT1:) 并使用该端口手动创建一个新打印机,并将 .jar 文件作为参数:

在打印机端口上配置的参数:

在打印机端口上配置的参数

我能够通过 NSIS(我用来创建安装程序的程序)创建一台新打印机,如下所示:

Exec 'cscript "C:\Windows\System32\Printing_Admin_Scripts\pt-BR\prnport.vbs" ^ -a -r RPT1:'
ExecWait 'rundll32 printui.dll,PrintUIEntry /if /f "$INSTDIR\ghostpdf.inf"^ /r "RPT1:" /m "Ghostscript PDF" /b "Impressora SPE" /u /Y'

有没有办法通过命令来配置端口?如果可能的话,我想为我的程序创建一个单独的端口(目前我正在使用默认的 RedMon 端口),但也在安装时将 Java 参数传递给它,因此最终用户不必手动包含这些论据。我到处寻找,但我发现的每一篇指南和文章都是手动完成的。

谢谢你的帮助!

4

1 回答 1

2

我花了一些时间去挖掘,但我终于找到了使用 RedMon 设置新打印机端口所需的命令,并认为我会在这里分享它,这样就可以减少人们很难找到它。

rundll32 "REDMONPATH\redmon32.dll", RedMonConfigurePort Port="PORT:" Command="JAVA" Arguments="-jar ""JAR"" ""C:\Program Files (x86)\gs\gs9.21\bin\gswin32c -I\""C:\Program Files (x86)\gs\gs9.21\lib\"" -dSAFER -dBATCH -dNOPAUSE -sDEVICE=pdfwrite -sPAPERSIZE=a4 -r300"""

其中 REDMONPATH 是 RedMon 安装文件夹的路径,PORT 是端口名称,JAVA 是 java.exe 的路径,JAR 是 .jar 文件的路径。请保留双引号,这是我们通过命令传递引号的方式。但是,您必须在 RedMon 安装文件夹上运行此命令。此外,您必须以管理员身份运行,否则您可能会收到错误并错误地认为您做错了什么。就我而言,使用 NSIS,这是完整的命令行:

ExecWait 'rundll32 "$INSTDIR\redmon\redmon32.dll", RedMonConfigurePort Port="SPE:" Command="C:\Program Files (x86)\Java\jre1.8.0_144\bin\java.exe" Arguments="-jar ""C:\Program Files (x86)\Impressora SPE\ImpressoraSPE.jar"" \""C:\Program Files (x86)\gs\gs9.21\bin\gswin32c -l \""C:\Program Files (x86)\gs\gs9.21\lib\"" -dSAFER -dBATCH -dNOPAUSE -sDEVICE=pdfwrite -sPAPERSIZE=a4 -r300"""'

之后,您可以正常使用新端口安装新打印机:

ExecWait 'rundll32 printui.dll,PrintUIEntry /if /f "$INSTDIR\ghostpdf.inf" /r "PORT:" /m "Ghostscript PDF" /b "PRINTER_NAME" /u /Y'`

如果您尝试从命令提示符而不是 NSIS 运行它,您所要做的就是删除“ExecWait”位和命令周围的单引号。还将“$INSTDIR\something”替换为相应的完整路径。

如果其他人在这个问题上需要进一步的帮助,看到我个人在这方面遇到了很大的困难,请随时在这里问他们,我会尽力提供帮助!

编辑:我为不断的编辑道歉,只是确保留下对大多数人有帮助的说明,因为我在不同版本的 Windows 中测试这些说明。

于 2017-08-17T12:47:00.880 回答