🎨 Windows 端安装脚本检测是否存在工作空间数据 Fix https://github.com/siyuan-note/siyuan/issues/7717

This commit is contained in:
Liang Ding 2023-03-20 20:40:28 +08:00
parent 851bf488c2
commit c459615570
No known key found for this signature in database
GPG key ID: 136F30F901A2231D
2 changed files with 79 additions and 10 deletions

View file

@ -37,6 +37,7 @@ nsis:
shortcutName: "SiYuan"
license: "../LICENSE"
include: "nsis/installer.nsh"
warningsAsErrors: false
installerSidebar: "nsis/installerSidebar.bmp"
uninstallerSidebar: "nsis/uninstallerSidebar.bmp"

View file

@ -2,19 +2,87 @@
Caption "${PRODUCT_NAME} ${VERSION}"
!macro preInit
nsExec::Exec 'TASKKILL /F /IM "SiYuan.exe"'
nsExec::Exec 'TASKKILL /F /IM "SiYuan-Kernel.exe"'
!macroend
!macro customInstallMode
${IfNot} ${AtLeastWin10}
MessageBox MB_ICONEXCLAMATION "即将停止对 Windows 7/8 和 Server 2012 的支持,建议升级到 Windows 10 或者更高版本。$\n$\n\
Support for Windows 7/8 and Server 2012 will be stopped soon, it is recommended to upgrade to Windows 10 or higher version.$\n"
${EndIf}
MessageBox MB_ICONEXCLAMATION|MB_OKCANCEL "进行安装或卸载时会删除安装目录下所有文件,请务必确认工作空间没有放置在安装路径下!是否继续?$\n$\n\
When installing or uninstalling, all files in the installation directory will be deleted, please make sure that the workspace is not placed in the installation path! Do you want to continue?$\n" IDOK yes IDCANCEL no
no:
Quit
yes:
nsExec::Exec 'TASKKILL /F /IM "SiYuan.exe"'
nsExec::Exec 'TASKKILL /F /IM "SiYuan-Kernel.exe"'
!macroend
!macro customUnInit
${un.FindIt} "$INSTDIR" "data" $R0
${If} -1 != $R0
MessageBox MB_ICONSTOP "检测到安装路径下包含了工作空间数据 $R0请将工作空间文件夹移到其他位置后再试。$\n$\n\
The workspace data $R0 was detected in the installation path, please move the workspace folder to another location and try again.$\n"
Quit
${EndIf}
!macroend
# https://nsis.sourceforge.io/FindIt:_Simple_search_for_file_/_directory
!macro un.FindIt In For Result
Push "${In}"
Push "${For}"
Call un.FindIt
Pop "${Result}"
!macroend
!define un.FindIt "!insertmacro un.FindIt"
Function un.FindIt
Exch $R0
Exch
Exch $R1
Push $R2
Push $R3
Push $R4
Push $R5
Push $R6
StrCpy $R6 -1
StrCpy $R3 1
Push $R1
nextDir:
Pop $R1
IntOp $R3 $R3 - 1
ClearErrors
FindFirst $R5 $R2 "$R1\*.*"
nextFile:
StrCmp $R2 "." gotoNextFile
StrCmp $R2 ".." gotoNextFile
StrCmp $R2 $R0 0 isDir
StrCpy $R6 "$R1\$R2"
loop:
StrCmp $R3 0 done
Pop $R1
IntOp $R3 $R3 - 1
Goto loop
isDir:
IfFileExists "$R1\$R2\*.*" 0 gotoNextFile
IntOp $R3 $R3 + 1
Push "$R1\$R2"
gotoNextFile:
FindNext $R5 $R2
IfErrors 0 nextFile
done:
FindClose $R5
StrCmp $R3 0 0 nextDir
StrCpy $R0 $R6
Pop $R6
Pop $R5
Pop $R4
Pop $R3
Pop $R2
Pop $R1
Exch $R0
FunctionEnd