繁体   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