通过提示配置打印机的重定向端口
Configuring a printer's redirect port via prompt
我一直在尝试为我在 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 参数传递给它,所以最终用户没有手动包含这些参数。我到处都看过,但我找到的每篇指南和文章都是手动完成的。
感谢您的帮助!
我花了一些时间挖掘,但我终于找到了使用 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 的不同版本中测试了这些说明。
我一直在尝试为我在 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 参数传递给它,所以最终用户没有手动包含这些参数。我到处都看过,但我找到的每篇指南和文章都是手动完成的。
感谢您的帮助!
我花了一些时间挖掘,但我终于找到了使用 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 的不同版本中测试了这些说明。