install.nsi 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172
  1. Name "PaoTin++ for Windows"
  2. OutFile setup.exe
  3. ShowInstDetails show
  4. AllowRootDirInstall true
  5. !include "FileFunc.nsh"
  6. !include "nsDialogs.nsh"
  7. !include "winmessages.nsh"
  8. Page custom SelectDriver
  9. Page instfiles
  10. var dialog
  11. var hctrl
  12. var drive
  13. Function getDrivesCallback
  14. ${NSD_CB_AddString} $hctrl "$9"
  15. Push $0
  16. FunctionEnd
  17. Function changeSelect
  18. ${NSD_GetText} $hctrl $0
  19. StrCpy $drive $0
  20. FunctionEnd
  21. Function SelectDriver
  22. nsDialogs::Create 1018
  23. Pop $dialog
  24. ${NSD_CreateLabel} 0 10u 100% 20u "Select which disk you want to install to:"
  25. Pop $hctrl
  26. ${NSD_CreateDropList} 0 30u 100% 80u "Select"
  27. Pop $hctrl
  28. ${GetDrives} "HDD" "getDrivesCallback"
  29. StrCpy $drive "C:\"
  30. ${NSD_CB_SelectString} $hctrl "$drive"
  31. ${NSD_OnChange} $hctrl "changeSelect"
  32. nsDialogs::Show
  33. FunctionEnd
  34. var file
  35. var dir
  36. Section
  37. StrCpy $drive $drive 2
  38. StrCpy $file "$TEMP\settings.json"
  39. FileOpen $R3 $file w
  40. FileWrite $R3 "{$\r$\n"
  41. FileWrite $R3 " $\"profiles$\": $\r$\n"
  42. FileWrite $R3 " {$\r$\n"
  43. FileWrite $R3 " $\"defaults$\": {},$\r$\n"
  44. FileWrite $R3 " $\"list$\": $\r$\n"
  45. FileWrite $R3 " [$\r$\n"
  46. FileWrite $R3 " {$\r$\n"
  47. FileWrite $R3 " $\"commandline$\": $\"$drive\\paotin\\bin\\tt++.exe ids/tintin$\",$\r$\n"
  48. FileWrite $R3 " $\"guid$\": $\"{0b778637-b3ef-410d-b678-3f825e2cdef1}$\",$\r$\n"
  49. FileWrite $R3 " $\"hidden$\": true,$\r$\n"
  50. FileWrite $R3 " $\"name$\": $\"WinTin++$\",$\r$\n"
  51. FileWrite $R3 " $\"startingDirectory$\": $\"$drive\\paotin$\"$\r$\n"
  52. FileWrite $R3 " },$\r$\n"
  53. FileWrite $R3 " {$\r$\n"
  54. FileWrite $R3 " $\"commandline$\": $\"$drive\\paotin\\bin\\tt++.exe ids/paotin$\",$\r$\n"
  55. FileWrite $R3 " $\"guid$\": $\"{0b778637-b3ef-410d-b678-3f825e2cdef2}$\",$\r$\n"
  56. FileWrite $R3 " $\"hidden$\": true,$\r$\n"
  57. FileWrite $R3 " $\"name$\": $\"PaoTin++ for Windows$\",$\r$\n"
  58. FileWrite $R3 " $\"startingDirectory$\": $\"$drive\\paotin$\"$\r$\n"
  59. FileWrite $R3 " },$\r$\n"
  60. FileWrite $R3 " {$\r$\n"
  61. FileWrite $R3 " $\"commandline$\": $\"$drive\\paotin\\bin\\tt++.exe ids/pkuxkx$\",$\r$\n"
  62. FileWrite $R3 " $\"guid$\": $\"{0b778637-b3ef-410d-b678-3f825e2cdef3}$\",$\r$\n"
  63. FileWrite $R3 " $\"hidden$\": false,$\r$\n"
  64. FileWrite $R3 " $\"name$\": $\"\u5317\u5927\u4fa0\u5ba2\u884c$\",$\r$\n"
  65. FileWrite $R3 " $\"startingDirectory$\": $\"$drive\\paotin$\"$\r$\n"
  66. FileWrite $R3 " },$\r$\n"
  67. FileWrite $R3 " {$\r$\n"
  68. FileWrite $R3 " $\"commandline$\": $\"$drive\\paotin\\bin\\tt++.exe ids/thuxyj$\",$\r$\n"
  69. FileWrite $R3 " $\"guid$\": $\"{0b778637-b3ef-410d-b678-3f825e2cdef4}$\",$\r$\n"
  70. FileWrite $R3 " $\"hidden$\": false,$\r$\n"
  71. FileWrite $R3 " $\"name$\": $\"\u6e05\u534e\u897f\u6e38\u8bb0$\",$\r$\n"
  72. FileWrite $R3 " $\"startingDirectory$\": $\"$drive\\paotin$\"$\r$\n"
  73. FileWrite $R3 " }$\r$\n"
  74. FileWrite $R3 " ]$\r$\n"
  75. FileWrite $R3 " }$\r$\n"
  76. FileWrite $R3 "}$\r$\n"
  77. FileClose $R3
  78. StrCpy $dir "$LocalAppData\Microsoft\Windows Terminal\Fragments\PaoTin++"
  79. CreateDirectory "$dir"
  80. CopyFiles /SILENT "$file" "$dir"
  81. RMDir "$LocalAppData\Microsoft\Windows Terminal Preview\Fragments\PaoTin++"
  82. SectionEnd
  83. Section
  84. StrCpy $INSTDIR "$drive\paotin"
  85. StrCpy $OUTDIR "$drive\paotin"
  86. SetOutPath "$INSTDIR"
  87. RMDir "$INSTDIR"
  88. File /r *
  89. StrCpy $file "$drive\paotin\etc\windows.tin"
  90. FileOpen $R3 $file w
  91. FileWrite $R3 "#var gPaoTinPath {$drive/paotin};$\r$\n"
  92. FileWrite $R3 "#var gPaoTinVarPath {$drive/my-paotin};$\r$\n"
  93. FileClose $R3
  94. SectionEnd
  95. !define CreateJunction "!insertmacro CreateJunction"
  96. Function CreateJunction
  97. Exch $4
  98. Exch
  99. Exch $5
  100. Push $1
  101. Push $2
  102. Push $3
  103. Push $6
  104. CreateDirectory "$5"
  105. System::Call "kernel32::CreateFileW(w `$5`, i 0x40000000, i 0, i 0, i 3, i 0x02200000, i 0) i .r6"
  106. ${If} $0 = "-1"
  107. StrCpy $0 "0"
  108. RMDir "$5"
  109. goto create_junction_end
  110. ${EndIf}
  111. CreateDirectory "$4" ; Windows XP requires that the destination exists
  112. StrCpy $4 "\??\$4"
  113. StrLen $0 $4
  114. IntOp $0 $0 * 2
  115. IntOp $1 $0 + 2
  116. IntOp $2 $1 + 10
  117. IntOp $3 $1 + 18
  118. System::Call "*(i 0xA0000003, &i4 $2, &i2 0, &i2 $0, &i2 $1, &i2 0, &w$1 `$4`, &i2 0)i.r2"
  119. System::Call "kernel32::DeviceIoControl(i r6, i 0x900A4, i r2, i r3, i 0, i 0, *i r4r4, i 0) i.r0"
  120. System::Call "kernel32::CloseHandle(i r6) i.r1"
  121. ${If} $0 == "0"
  122. RMDir "$5"
  123. ${EndIf}
  124. create_junction_end:
  125. Pop $6
  126. Pop $3
  127. Pop $2
  128. Pop $1
  129. Pop $5
  130. Pop $4
  131. FunctionEnd
  132. !macro CreateJunction Junction Target outVar
  133. Push $0
  134. Push "${Junction}"
  135. Push "${Target}"
  136. Call CreateJunction
  137. StrCpy ${outVar} $0
  138. Pop $0
  139. !macroend
  140. Section
  141. CreateDirectory "$drive\my-paotin"
  142. CreateDirectory "$drive\my-paotin\ids"
  143. CreateDirectory "$drive\my-paotin\etc"
  144. CreateDirectory "$drive\my-paotin\data"
  145. CreateDirectory "$drive\my-paotin\log"
  146. CreateDirectory "$drive\my-paotin\plugins"
  147. ${CreateJunction} "$drive\paotin\var" "$drive\my-paotin" $0
  148. SectionEnd