install.nsi 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168
  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$\": false,$\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$\": false,$\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. StrCpy $dir "$LocalAppData\Microsoft\Windows Terminal Preview\Fragments\PaoTin++"
  82. CreateDirectory "$dir"
  83. CopyFiles /SILENT "$file" "$dir"
  84. SectionEnd
  85. Section
  86. StrCpy $INSTDIR "$drive\paotin"
  87. StrCpy $OUTDIR "$drive\paotin"
  88. SetOutPath "$INSTDIR"
  89. RMDir "$INSTDIR"
  90. File /r *
  91. SectionEnd
  92. !define CreateJunction "!insertmacro CreateJunction"
  93. Function CreateJunction
  94. Exch $4
  95. Exch
  96. Exch $5
  97. Push $1
  98. Push $2
  99. Push $3
  100. Push $6
  101. CreateDirectory "$5"
  102. System::Call "kernel32::CreateFileW(w `$5`, i 0x40000000, i 0, i 0, i 3, i 0x02200000, i 0) i .r6"
  103. ${If} $0 = "-1"
  104. StrCpy $0 "0"
  105. RMDir "$5"
  106. goto create_junction_end
  107. ${EndIf}
  108. CreateDirectory "$4" ; Windows XP requires that the destination exists
  109. StrCpy $4 "\??\$4"
  110. StrLen $0 $4
  111. IntOp $0 $0 * 2
  112. IntOp $1 $0 + 2
  113. IntOp $2 $1 + 10
  114. IntOp $3 $1 + 18
  115. System::Call "*(i 0xA0000003, &i4 $2, &i2 0, &i2 $0, &i2 $1, &i2 0, &w$1 `$4`, &i2 0)i.r2"
  116. System::Call "kernel32::DeviceIoControl(i r6, i 0x900A4, i r2, i r3, i 0, i 0, *i r4r4, i 0) i.r0"
  117. System::Call "kernel32::CloseHandle(i r6) i.r1"
  118. ${If} $0 == "0"
  119. RMDir "$5"
  120. ${EndIf}
  121. create_junction_end:
  122. Pop $6
  123. Pop $3
  124. Pop $2
  125. Pop $1
  126. Pop $5
  127. Pop $4
  128. FunctionEnd
  129. !macro CreateJunction Junction Target outVar
  130. Push $0
  131. Push "${Junction}"
  132. Push "${Target}"
  133. Call CreateJunction
  134. StrCpy ${outVar} $0
  135. Pop $0
  136. !macroend
  137. Section
  138. CreateDirectory "$drive\my-paotin"
  139. CreateDirectory "$drive\my-paotin\ids"
  140. CreateDirectory "$drive\my-paotin\etc"
  141. CreateDirectory "$drive\my-paotin\data"
  142. CreateDirectory "$drive\my-paotin\log"
  143. CreateDirectory "$drive\my-paotin\plugins"
  144. ${CreateJunction} "$drive\paotin\var" "$drive\my-paotin" $0
  145. SectionEnd