install.nsi 5.1 KB

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