diff --git a/.gitignore b/.gitignore index 21c445edf..6d505cf44 100644 --- a/.gitignore +++ b/.gitignore @@ -8,3 +8,4 @@ /fx.zip /README.md .DS_Store +windows-debug-launcher.nsi.in \ No newline at end of file diff --git a/ant/windows/installer.xml b/ant/windows/installer.xml index 27dd05484..d68884f6e 100644 --- a/ant/windows/installer.xml +++ b/ant/windows/installer.xml @@ -15,6 +15,15 @@ + + + + + + + + + diff --git a/ant/windows/nsis/Include/StrLoc.nsh b/ant/windows/nsis/Include/StrLoc.nsh new file mode 100644 index 000000000..8adb1caab --- /dev/null +++ b/ant/windows/nsis/Include/StrLoc.nsh @@ -0,0 +1,72 @@ +!define StrLoc "!insertmacro StrLoc" + +!macro StrLoc ResultVar String SubString StartPoint + Push "${String}" + Push "${SubString}" + Push "${StartPoint}" + Call StrLoc + Pop "${ResultVar}" +!macroend + +Function StrLoc +/*After this point: + ------------------------------------------ + $R0 = StartPoint (input) + $R1 = SubString (input) + $R2 = String (input) + $R3 = SubStringLen (temp) + $R4 = StrLen (temp) + $R5 = StartCharPos (temp) + $R6 = TempStr (temp)*/ + + ;Get input from user + Exch $R0 + Exch + Exch $R1 + Exch 2 + Exch $R2 + Push $R3 + Push $R4 + Push $R5 + Push $R6 + + ;Get "String" and "SubString" length + StrLen $R3 $R1 + StrLen $R4 $R2 + ;Start "StartCharPos" counter + StrCpy $R5 0 + + ;Loop until "SubString" is found or "String" reaches its end + ${Do} + ;Remove everything before and after the searched part ("TempStr") + StrCpy $R6 $R2 $R3 $R5 + + ;Compare "TempStr" with "SubString" + ${If} $R6 == $R1 + ${If} $R0 == `<` + IntOp $R6 $R3 + $R5 + IntOp $R0 $R4 - $R6 + ${Else} + StrCpy $R0 $R5 + ${EndIf} + ${ExitDo} + ${EndIf} + ;If not "SubString", this could be "String"'s end + ${If} $R5 >= $R4 + StrCpy $R0 `` + ${ExitDo} + ${EndIf} + ;If not, continue the loop + IntOp $R5 $R5 + 1 + ${Loop} + + ;Return output to user + Pop $R6 + Pop $R5 + Pop $R4 + Pop $R3 + Pop $R2 + Exch + Pop $R1 + Exch $R0 +FunctionEnd \ No newline at end of file diff --git a/ant/windows/nsis/console.ico b/ant/windows/nsis/console.ico new file mode 100644 index 000000000..1630b6e01 Binary files /dev/null and b/ant/windows/nsis/console.ico differ diff --git a/ant/windows/windows-launcher.nsi.in b/ant/windows/windows-launcher.nsi.in index c15ed51ee..5a326acbf 100644 --- a/ant/windows/windows-launcher.nsi.in +++ b/ant/windows/windows-launcher.nsi.in @@ -8,6 +8,7 @@ !endif !addincludedir "${basedir}/ant/windows/nsis/Include" !include StdUtils.nsh +!include StrLoc.nsh !include FindJava.nsh !insertmacro GetParameters @@ -54,7 +55,17 @@ Section IfErrors +2 0 StrCpy $opts "$opts $R0" - Exec '"$javaw" $opts -jar "${JAR}" $params' + Var /GLOBAL command + StrCpy $command '"$javaw" $opts -jar "${JAR}" $params' + + ; If ends in "-console.exe", use "cmd /s /k" to launch + ${StrLoc} $R1 "${nsis.outfile}" "-console.exe" "<" + ${If} $R1 == "0" + ExpandEnvStrings $R2 %COMSPEC% + StrCpy $command '"$R2" /s /k "$command"' + ${EndIf} + + Exec $command ${If} ${RunningX64} ${EnableX64FSRedirection} ${EndIf}