【问题标题】:Pass arguments to already running nsis java launcher将参数传递给已经运行的 nsis java 启动器
【发布时间】:2012-01-13 11:02:48
【问题描述】:

我正在使用 nsis 启动我的 java 应用程序。我想在应用程序启动后显示一个窗口。我可以像这样在启动 java 应用程序时传递命令行参数。

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

现在,如果调用 nsis 启动器的另一个实例,我想显示已经运行的 java 应用程序的默认窗口。为此,我需要将一个参数传递给我的 java 应用程序。为此,我必须将参数传递给已运行实例的 cmd 窗口(NSIS 内部使用)。

我将如何做到这一点?

【问题讨论】:

  • NSIS使用的cmd窗口是什么意思?

标签: java arguments nsis


【解决方案1】:

我不确定我是否理解正确,但您可以使用 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:

如果您有 Spy++(Microsoft Visual Studio 附带),您可以找到您的 Java 应用程序的窗口类。

【讨论】:

  • 这正是我所做的。但这有一个问题。 java窗口出现了,但窗口内的内容却加载了。此外,窗口类名称是通用的,如“SunAwtClass”。所以我不得不使用套接字侦听器将参数传递给 java 应用程序以显示窗口。
  • 也许你可以执行 'START "unique title" [/Dpath] [options] "javaw ..." [parameters]' 代替,然后寻找你指定的标题?
猜你喜欢
  • 2012-08-16
  • 1970-01-01
  • 2019-03-26
  • 2015-02-12
  • 1970-01-01
  • 1970-01-01
  • 2011-05-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多