|
|
@@ -0,0 +1,168 @@
|
|
|
+Name "PaoTin++ for Windows"
|
|
|
+OutFile setup.exe
|
|
|
+ShowInstDetails show
|
|
|
+AllowRootDirInstall true
|
|
|
+
|
|
|
+!include "FileFunc.nsh"
|
|
|
+!include "nsDialogs.nsh"
|
|
|
+!include "winmessages.nsh"
|
|
|
+
|
|
|
+Page custom SelectDriver
|
|
|
+Page instfiles
|
|
|
+
|
|
|
+var dialog
|
|
|
+var hctrl
|
|
|
+var drive
|
|
|
+
|
|
|
+Function getDrivesCallback
|
|
|
+ ${NSD_CB_AddString} $hctrl "$9"
|
|
|
+ Push $0
|
|
|
+FunctionEnd
|
|
|
+
|
|
|
+Function changeSelect
|
|
|
+ ${NSD_GetText} $hctrl $0
|
|
|
+ StrCpy $drive $0
|
|
|
+FunctionEnd
|
|
|
+
|
|
|
+Function SelectDriver
|
|
|
+ nsDialogs::Create 1018
|
|
|
+ Pop $dialog
|
|
|
+
|
|
|
+ ${NSD_CreateLabel} 0 10u 100% 20u "Select which disk you want to install to:"
|
|
|
+ Pop $hctrl
|
|
|
+ ${NSD_CreateDropList} 0 30u 100% 80u "Select"
|
|
|
+ Pop $hctrl
|
|
|
+
|
|
|
+ ${GetDrives} "HDD" "getDrivesCallback"
|
|
|
+ StrCpy $drive "C:\"
|
|
|
+ ${NSD_CB_SelectString} $hctrl "$drive"
|
|
|
+
|
|
|
+ ${NSD_OnChange} $hctrl "changeSelect"
|
|
|
+
|
|
|
+ nsDialogs::Show
|
|
|
+FunctionEnd
|
|
|
+
|
|
|
+var file
|
|
|
+var dir
|
|
|
+
|
|
|
+Section
|
|
|
+ StrCpy $drive $drive 2
|
|
|
+ StrCpy $file "$TEMP\settings.json"
|
|
|
+ FileOpen $R3 $file w
|
|
|
+ FileWrite $R3 "{$\r$\n"
|
|
|
+ FileWrite $R3 " $\"profiles$\": $\r$\n"
|
|
|
+ FileWrite $R3 " {$\r$\n"
|
|
|
+ FileWrite $R3 " $\"defaults$\": {},$\r$\n"
|
|
|
+ FileWrite $R3 " $\"list$\": $\r$\n"
|
|
|
+ FileWrite $R3 " [$\r$\n"
|
|
|
+ FileWrite $R3 " {$\r$\n"
|
|
|
+ FileWrite $R3 " $\"commandline$\": $\"$drive\\paotin\\bin\\tt++.exe ids/tintin$\",$\r$\n"
|
|
|
+ FileWrite $R3 " $\"guid$\": $\"{0b778637-b3ef-410d-b678-3f825e2cdef1}$\",$\r$\n"
|
|
|
+ FileWrite $R3 " $\"hidden$\": false,$\r$\n"
|
|
|
+ FileWrite $R3 " $\"name$\": $\"WinTin++$\",$\r$\n"
|
|
|
+ FileWrite $R3 " $\"startingDirectory$\": $\"$drive\\paotin$\"$\r$\n"
|
|
|
+ FileWrite $R3 " },$\r$\n"
|
|
|
+ FileWrite $R3 " {$\r$\n"
|
|
|
+ FileWrite $R3 " $\"commandline$\": $\"$drive\\paotin\\bin\\tt++.exe ids/paotin$\",$\r$\n"
|
|
|
+ FileWrite $R3 " $\"guid$\": $\"{0b778637-b3ef-410d-b678-3f825e2cdef2}$\",$\r$\n"
|
|
|
+ FileWrite $R3 " $\"hidden$\": false,$\r$\n"
|
|
|
+ FileWrite $R3 " $\"name$\": $\"PaoTin++ for Windows$\",$\r$\n"
|
|
|
+ FileWrite $R3 " $\"startingDirectory$\": $\"$drive\\paotin$\"$\r$\n"
|
|
|
+ FileWrite $R3 " },$\r$\n"
|
|
|
+ FileWrite $R3 " {$\r$\n"
|
|
|
+ FileWrite $R3 " $\"commandline$\": $\"$drive\\paotin\\bin\\tt++.exe ids/pkuxkx$\",$\r$\n"
|
|
|
+ FileWrite $R3 " $\"guid$\": $\"{0b778637-b3ef-410d-b678-3f825e2cdef3}$\",$\r$\n"
|
|
|
+ FileWrite $R3 " $\"hidden$\": false,$\r$\n"
|
|
|
+ FileWrite $R3 " $\"name$\": $\"\u5317\u5927\u4fa0\u5ba2\u884c$\",$\r$\n"
|
|
|
+ FileWrite $R3 " $\"startingDirectory$\": $\"$drive\\paotin$\"$\r$\n"
|
|
|
+ FileWrite $R3 " },$\r$\n"
|
|
|
+ FileWrite $R3 " {$\r$\n"
|
|
|
+ FileWrite $R3 " $\"commandline$\": $\"$drive\\paotin\\bin\\tt++.exe ids/thuxyj$\",$\r$\n"
|
|
|
+ FileWrite $R3 " $\"guid$\": $\"{0b778637-b3ef-410d-b678-3f825e2cdef4}$\",$\r$\n"
|
|
|
+ FileWrite $R3 " $\"hidden$\": false,$\r$\n"
|
|
|
+ FileWrite $R3 " $\"name$\": $\"\u6e05\u534e\u897f\u6e38\u8bb0$\",$\r$\n"
|
|
|
+ FileWrite $R3 " $\"startingDirectory$\": $\"$drive\\paotin$\"$\r$\n"
|
|
|
+ FileWrite $R3 " }$\r$\n"
|
|
|
+ FileWrite $R3 " ]$\r$\n"
|
|
|
+ FileWrite $R3 " }$\r$\n"
|
|
|
+ FileWrite $R3 "}$\r$\n"
|
|
|
+ FileClose $R3
|
|
|
+
|
|
|
+ StrCpy $dir "$LocalAppData\Microsoft\Windows Terminal\Fragments\PaoTin++"
|
|
|
+ CreateDirectory "$dir"
|
|
|
+ CopyFiles /SILENT "$file" "$dir"
|
|
|
+ StrCpy $dir "$LocalAppData\Microsoft\Windows Terminal Preview\Fragments\PaoTin++"
|
|
|
+ CreateDirectory "$dir"
|
|
|
+ CopyFiles /SILENT "$file" "$dir"
|
|
|
+SectionEnd
|
|
|
+
|
|
|
+Section
|
|
|
+ StrCpy $INSTDIR "$drive\paotin"
|
|
|
+ StrCpy $OUTDIR "$drive\paotin"
|
|
|
+ SetOutPath "$INSTDIR"
|
|
|
+ RMDir "$INSTDIR"
|
|
|
+ File /r *
|
|
|
+SectionEnd
|
|
|
+
|
|
|
+!define CreateJunction "!insertmacro CreateJunction"
|
|
|
+
|
|
|
+Function CreateJunction
|
|
|
+ Exch $4
|
|
|
+ Exch
|
|
|
+ Exch $5
|
|
|
+ Push $1
|
|
|
+ Push $2
|
|
|
+ Push $3
|
|
|
+ Push $6
|
|
|
+ CreateDirectory "$5"
|
|
|
+ System::Call "kernel32::CreateFileW(w `$5`, i 0x40000000, i 0, i 0, i 3, i 0x02200000, i 0) i .r6"
|
|
|
+
|
|
|
+ ${If} $0 = "-1"
|
|
|
+ StrCpy $0 "0"
|
|
|
+ RMDir "$5"
|
|
|
+ goto create_junction_end
|
|
|
+ ${EndIf}
|
|
|
+
|
|
|
+ CreateDirectory "$4" ; Windows XP requires that the destination exists
|
|
|
+ StrCpy $4 "\??\$4"
|
|
|
+ StrLen $0 $4
|
|
|
+ IntOp $0 $0 * 2
|
|
|
+ IntOp $1 $0 + 2
|
|
|
+ IntOp $2 $1 + 10
|
|
|
+ IntOp $3 $1 + 18
|
|
|
+ System::Call "*(i 0xA0000003, &i4 $2, &i2 0, &i2 $0, &i2 $1, &i2 0, &w$1 `$4`, &i2 0)i.r2"
|
|
|
+ System::Call "kernel32::DeviceIoControl(i r6, i 0x900A4, i r2, i r3, i 0, i 0, *i r4r4, i 0) i.r0"
|
|
|
+ System::Call "kernel32::CloseHandle(i r6) i.r1"
|
|
|
+
|
|
|
+ ${If} $0 == "0"
|
|
|
+ RMDir "$5"
|
|
|
+ ${EndIf}
|
|
|
+
|
|
|
+ create_junction_end:
|
|
|
+ Pop $6
|
|
|
+ Pop $3
|
|
|
+ Pop $2
|
|
|
+ Pop $1
|
|
|
+ Pop $5
|
|
|
+ Pop $4
|
|
|
+FunctionEnd
|
|
|
+
|
|
|
+!macro CreateJunction Junction Target outVar
|
|
|
+ Push $0
|
|
|
+ Push "${Junction}"
|
|
|
+ Push "${Target}"
|
|
|
+ Call CreateJunction
|
|
|
+ StrCpy ${outVar} $0
|
|
|
+ Pop $0
|
|
|
+!macroend
|
|
|
+
|
|
|
+Section
|
|
|
+ CreateDirectory "$drive\my-paotin"
|
|
|
+ CreateDirectory "$drive\my-paotin\ids"
|
|
|
+ CreateDirectory "$drive\my-paotin\etc"
|
|
|
+ CreateDirectory "$drive\my-paotin\data"
|
|
|
+ CreateDirectory "$drive\my-paotin\log"
|
|
|
+ CreateDirectory "$drive\my-paotin\plugins"
|
|
|
+
|
|
|
+ ${CreateJunction} "$drive\paotin\var" "$drive\my-paotin" $0
|
|
|
+SectionEnd
|