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}