2017-08-09 117 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中測試這些指令時能夠幫助大多數人。