2012-01-13 55 views
0

正在使用nsis啓動我的java應用程序。我想在應用程序啓動後顯示一個窗口。我可以在啓動java應用程序時傳遞命令行參數。現在將參數傳遞給已經運行的nsis java launcher

OutFile "Test.exe" 
.... 
ExecWait javaw.exe -jar myapp.jar 
SectionEnd 

我想顯示已經運行的Java應用程序的默認窗口如果調用NSIS發射器的另一個實例。爲了做到這一點,我需要將一個參數傳遞給我的Java應用程序。爲了做到這一點,我必須將參數傳遞給已經運行的實例的cmd窗口(由NSIS內部使用)。

我該如何做到這一點?

+0

NSIS使用的cmd窗口是什麼意思? – Anders 2012-01-13 20:45:56

回答

0

我不確定我是否正確理解您,但您可以使用this example爲nsis安裝程序創建互斥鎖。這個例子會讓已經運行的安裝程序出現在前面,如果你知道它的句柄或標題,你可以稍微改變一下,以便運行java窗口。

 System::Call "kernel32::CreateMutexA(i 0, i 0, t 'my_mutex') i .r0 ?e" 
    Pop $0 
    StrCmp $0 0 launch 
    FindWindow $1 "my window class" "my window title" 
    IntCmp $1 0 bring_front end 
    bring_front: 
    System::Call "user32::SetForegroundWindow(i r1) i." 
    end: 
    Abort 
    launch: 

如果你有間諜++(隨微軟的Visual Studio),你可以找到窗口類的Java應用程序的。

+0

這正是我所做的。但是有一個問題。 java窗口出現,但窗口內的內容加載。此外,窗口類名稱是通用的,如'SunAwtClass'。所以我不得不使用套接字監聽器將參數傳遞給java應用程序來顯示窗口。 – Andrews 2012-01-30 14:18:16

+0

也許你可以執行'START'獨特的標題「[/ Dpath] [options]」javaw ...「[參數]',然後尋找你指定的標題? – zenpoy 2012-02-02 14:30:43

相關問題