feat(clean): NSIS uninstaller script and include it (#74)

This commit is contained in:
DigHuang
2026-02-13 01:25:27 -08:00
committed by GitHub
Unverified
parent e7a36320ee
commit 5946deec05
2 changed files with 56 additions and 0 deletions

55
scripts/installer.nsh Normal file
View File

@@ -0,0 +1,55 @@
; ClawX Custom NSIS Uninstaller Script
; Provides a "Complete Removal" option during uninstallation
; to delete .openclaw config and AppData resources.
; Handles both per-user and per-machine (all users) installations.
!macro customUnInstall
; Ask user if they want to completely remove all user data
MessageBox MB_YESNO|MB_ICONQUESTION \
"Do you want to completely remove all ClawX user data?$\r$\n$\r$\nThis will delete:$\r$\n • .openclaw folder (configuration & skills)$\r$\n • AppData\Local\ClawX (local app data)$\r$\n • AppData\Roaming\ClawX (roaming app data)$\r$\n$\r$\nSelect 'No' to keep your data for future reinstallation." \
/SD IDNO IDYES _cu_removeData IDNO _cu_skipRemove
_cu_removeData:
; --- Always remove current user's data first ---
RMDir /r "$PROFILE\.openclaw"
RMDir /r "$LOCALAPPDATA\ClawX"
RMDir /r "$APPDATA\ClawX"
; --- For per-machine (all users) installs, enumerate all user profiles ---
; Registry key HKLM\...\ProfileList contains a subkey for each user SID.
; Each subkey has a ProfileImagePath value like "C:\Users\username"
; (which may contain unexpanded env vars like %SystemDrive%).
; We iterate all profiles, expand the path, skip the current user
; (already cleaned above), and remove data for every other user.
; RMDir /r silently does nothing if the directory doesn't exist or
; we lack permissions, so this is safe for per-user installs too.
StrCpy $R0 0 ; Registry enum index
_cu_enumLoop:
EnumRegKey $R1 HKLM "SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList" $R0
StrCmp $R1 "" _cu_enumDone ; No more subkeys -> done
; Read ProfileImagePath for this SID
ReadRegStr $R2 HKLM "SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList\$R1" "ProfileImagePath"
StrCmp $R2 "" _cu_enumNext ; Skip entries without a path
; ProfileImagePath may contain unexpanded env vars (e.g. %SystemDrive%),
; expand them to get the real path.
ExpandEnvStrings $R2 $R2
; Skip the current user's profile (already cleaned above)
StrCmp $R2 $PROFILE _cu_enumNext
; Remove .openclaw and AppData for this user profile
RMDir /r "$R2\.openclaw"
RMDir /r "$R2\AppData\Local\ClawX"
RMDir /r "$R2\AppData\Roaming\ClawX"
_cu_enumNext:
IntOp $R0 $R0 + 1
Goto _cu_enumLoop
_cu_enumDone:
_cu_skipRemove:
!macroend