2017-08-09 120 views
2

我一直在尝试为我在Java中编写的程序创建一个安装程序,实现GhostScript,该程序创建一个虚拟打印机,将文件发送到该打印机。我的程序然后读取文件并相应地进行管理。但是,我不得不手动配置雷德曼重定向端口(RPT1 :)和手动创建一个新的打印机,使用该端口,以作为参数的.jar文件:通过提示配置打印机的重定向端口

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

Arguments configured on the printer's port

我能够通过创建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参数传递给它,所以最终用户不必手动包含这些端口参数。我到处寻找,但是我发现每个指南和文章都是手动完成的。

感谢您的帮助!

+0

NSIS标签是如何相关的?你正在调用外部事物... – Anders

+0

我传递了通过NSIS安装打印机的命令,一旦程序安装完成,它就会像通常那样通过提示执行这些命令。我认为提及我使用NSIS是有帮助的,以防某些特殊情况下可能有用。 – Hugo

回答

1

我花了一点时间挖掘,但终于找到了使用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是路径到雷德曼安装文件夹,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中测试这些指令时能够帮助大多数人。