!include "FileFunc.nsh" !include "LogicLib.nsh" !include "WinMessages.nsh" !macro preInit ; 检查是否正在运行并关闭程序 ${If} ${FileExists} "$INSTDIR\智惠映.exe" ; 如果程序正在运行,先尝试关闭它 ExecWait 'taskkill /f /im "智惠映.exe"' $0 Sleep 1000 ; 再次检查是否还有进程在运行 ExecWait 'taskkill /f /im "智惠映.exe" /t' $0 Sleep 500 ${EndIf} !macroend !macro customInstall ; 检测是否已安装,如果是则进行覆盖安装 ${If} ${FileExists} "$INSTDIR\智惠映.exe" ; 已安装,进行覆盖安装 DetailPrint "检测到已安装版本,正在进行覆盖安装..." ${Else} ; 首次安装 DetailPrint "首次安装智惠映..." ${EndIf} !macroend !macro customUnInstall ; 自定义卸载逻辑:保留output目录 !macroend !macro customRemoveFiles ; 选择性删除文件,保留output目录 ; 删除程序文件,但保留用户数据目录 ; 删除资源文件 RMDir /r "$INSTDIR\resources" RMDir /r "$INSTDIR\locales" RMDir /r "$INSTDIR\swiftshader" ; 删除其他程序文件 Delete "$INSTDIR\*.pak" Delete "$INSTDIR\*.dll" Delete "$INSTDIR\*.dat" Delete "$INSTDIR\*.bin" Delete "$INSTDIR\*.html" Delete "$INSTDIR\*.json" Delete "$INSTDIR\*.exe" Delete "$INSTDIR\*.txt" Delete "$INSTDIR\*.ico" ; 保留用户数据目录 - 不要删除这些! ; $INSTDIR\output - 用户生成的图片和数据 ; $INSTDIR\extraResources - 可能包含用户文件 DetailPrint "保留用户数据目录: output" !macroend