簡體   English   中英

運行JAR文件的CreateProcess從最小化窗口開始

[英]CreateProcess for Running JAR File Starts with Window Minimized

我在C ++程序中使用CreateProcess調用來執行運行Java Swing GUI應用程序的JAR文件。 除了將Java應用程序最小化啟動,而且我希望它從顯示的窗口開始之外,所有其他程序都工作正常。 以下是相關的代碼段:

// Construct the command string to be used for the CreateProcess call,
//including a parameter string
sprintf(cmdStr, "javaw -jar \"AppDir\\App.jar\" %s", parmStr);

// Create and initialized startup-info structure for use with CreateProcess call
STARTUPINFO startInfo;
ZeroMemory(&startInfo, sizeof(startInfo));

startInfo.wShowWindow = SW_NORMAL;
startInfo.dwFlags = STARTF_USESHOWWINDOW;
startInfo.cb = sizeof(startInfo);
PROCESS_INFORMATION procInfo;
ZeroMemory(&procInfo, sizeof(procInfo));

if (!CreateProcess(NULL, cmdStr, NULL, NULL, FALSE, 0, NULL, NULL, &startInfo,  &procInfo))
{
   MessageBox( dialogOwner, "Create Process Error", "Application not instantiated", MB_OK);
}

根據MSDN文獻,應該將wShowWindow標志設置為SW_NORMAL並將dwFlags設置為STARTF_USESHOWWINDOW應該可以解決問題,但是我在該論壇和其他論壇上閱讀的一些評論暗示有時會忽略那些標志(例如,對於控制台應用程序),所以我想知道這里是否是這種情況。 記錄下來,在此之前我遇到了這個問題,現在它自行消失了,現在在我進行了一些代碼更改后又回來了。 但是我之前沒有在startupinfo結構中設置任何標志,因此我希望通過這樣做來實現行為上的某種一致性。 任何提示或指針將不勝感激...

謝爾頓·R。

這是對我以前的答案的更新:我必須根據上下文以兩種不同的方式(即“ java”或“ javaw”)調用java applet的原因,這與我所使用的C ++應用程序中的錯誤有關。給我的小程序打電話。 我知道這是因為在解決問題幾個月后,該應用程序的新版本發布了,並且此版本沒有潛在的錯誤,這實際上是由於“ java”而在我的applet中引起了一個新錯誤。命令執行您期望的操作,即除了applet窗口之外還實例化控制台窗口,這讓我的業務用戶大為驚訝:)。 因此,對於新的無錯誤版本的C ++應用程序,無論是否首先實例化對話框以使用戶能夠輸入登錄憑據,我都使用“ javaw”命令調用小程序。

謝爾頓

好的,我一直在研究解決問題的方法,現在終於可以開始討論了,因為它似乎正在起作用:)我將Java應用程序稱為以下兩種方式之一:要么首先彈出一個對話框收集登錄憑據,或通過使用保存的憑據直接調用應用程序。 對於登錄對話框,我使用參數“ javaw ...”調用CreateProcess,而保存憑據的情況似乎需要“ java ...”,以避免應用程序最小化啟動。 除了參數字符串的不同之外,有關CreateProcess調用的所有其他操作都是相同的。 我不知道為什么要在一種情況下使用“ java”,而在另一種情況下使用“ javaw”,但是由於它可以正常工作,所以我不會對此提出質疑:)但是,當然,如果有人想啟發一下這個主題,我很樂意了解更多。 感謝@Jim Garrison的建議,即使最終並不是我問題的解決方案...

謝爾頓·R。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM