如果未在程序文件中安装NSIS卸载程序,则不会删除应用程序文件

如果未在程序文件中安装NSIS卸载程序,则不会删除应用程序文件,nsis,uninstallation,Nsis,Uninstallation,您好,下面的程序无法删除应用程序文件,如果不是在程序文件中,我的意思是如果用户安装在其他位置。卸载后,将删除注册表值,但不会删除应用程序文件夹中的文件。任何帮助都将不胜感激 RequestExecutionLevel admin !define MULTIUSER_EXECUTIONLEVEL Admin !define MULTIUSER_INSTALLMODE_COMMANDLINE !include MultiUser.nsh !include FileFunc.nsh !ifndef

您好,下面的程序无法删除应用程序文件,如果不是在程序文件中,我的意思是如果用户安装在其他位置。卸载后,将删除注册表值,但不会删除应用程序文件夹中的文件。任何帮助都将不胜感激

RequestExecutionLevel admin
!define MULTIUSER_EXECUTIONLEVEL Admin
!define MULTIUSER_INSTALLMODE_COMMANDLINE
!include MultiUser.nsh
!include FileFunc.nsh

!ifndef PRODUCT_VERSION
  !define PRODUCT_VERSION "0.0.0.0"
!endif

!ifndef BUILD_TARGET
    !define BUILD_TARGET "Release"
!endif

!define OUT_FILE "PlaytestMateSetup.exe"

!if ${BUILD_TARGET} == "Debug"
!define PRODUCT_NAME "Playtest Mate 2.0 Debug"
!define PRODUCT_WEB_SITE "https://127.0.0.1:3000/"
!define MUI_ICON "..\PlaytestMate\Resources\Icons\IconRed.ico"
!endif

!if ${BUILD_TARGET} == "ReleaseTest"
!define PRODUCT_NAME "Playtest Mate 2.0 Staging"
!define PRODUCT_WEB_SITE "https://ca1-ptmstg01.ad.ea.com/"
!define MUI_ICON "..\PlaytestMate\Resources\Icons\IconBlue.ico"
!endif

!if ${BUILD_TARGET} == "Release"
!define PRODUCT_NAME "Playtest Mate 2.0"
!define PRODUCT_WEB_SITE "https://ca1-ptmprd01.ad.ea.com/"
!define MUI_ICON "..\PlaytestMate\Resources\Icons\IconBlack.ico"
!endif


!define PRODUCT_PUBLISHER "EA Digital Illusions CE AB"
!define RUN_REG_KEY "SOFTWARE\Microsoft\Windows\CurrentVersion\Run"
!define PRODUCT_UNINST_KEY "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_NAME}"
!define PRODUCT_INST_KEY "SOFTWARE\${PRODUCT_NAME}"

;BUILD_DIR and CERT_PATH have to be in relation to the .nsi file
!define BUILD_DIR "..\..\Bin\${BUILD_TARGET}"

; PTM-1089
; CERT settings
!define CERT_FILE "ea_root.cer"
!define CERT_PATH "3rdparty\${CERT_FILE}"
; end PTM-1089

!include "MUI2.nsh"

; 64 bit support
!include x64.nsh

; MUI Settings
!define MUI_ABORTWARNING

!define MUI_UNICON "${NSISDIR}\Contrib\Graphics\Icons\modern-uninstall.ico"
; Welcome page
!insertmacro MUI_PAGE_WELCOME
; Directory page
!define MUI_PAGE_CUSTOMFUNCTION_LEAVE "DirectoryLeave"
; Instfiles page
!insertmacro MUI_PAGE_DIRECTORY

!insertmacro MUI_PAGE_INSTFILES
; Finish page

Function DirectoryLeave

    # Show message box then take the user back to the Directory page.
    MessageBox MB_OK|MB_ICONEXCLAMATION "PTM consumes huge space because of the build sizes. We recommend to use a drive have maximum space other than C Drive"


FunctionEnd

Function createDesktopShortcut
  CreateShortCut "$DESKTOP\${PRODUCT_NAME}.lnk" "$INSTDIR\PlaytestMate.exe" "-shortcut"
FunctionEnd

!define MUI_FINISHPAGE_SHOWREADME ""
!define MUI_FINISHPAGE_SHOWREADME_TEXT "Create Desktop Shortcut"
!define MUI_FINISHPAGE_SHOWREADME_FUNCTION createDesktopShortcut

; Option to run PTM after install
!define MUI_FINISHPAGE_RUN "$INSTDIR\PlaytestMate.exe"

!insertmacro MUI_PAGE_FINISH

; Uninstaller pages
!define MUI_PAGE_CUSTOMFUNCTION_SHOW un.ModifyUnWelcome
!define MUI_PAGE_CUSTOMFUNCTION_LEAVE un.LeaveUnWelcome
!insertmacro MUI_UNPAGE_WELCOME
!insertmacro MUI_UNPAGE_INSTFILES

; Language files
!insertmacro MUI_LANGUAGE "English"

; MUI end ------

Name "${PRODUCT_NAME}"
OutFile "${OUT_FILE}"
VIProductVersion ${PRODUCT_VERSION}

VIAddVersionKey ProductName "${PRODUCT_NAME} Installer"
VIAddVersionKey CompanyName "${PRODUCT_PUBLISHER}"
VIAddVersionKey FileDescription "Installs ${PRODUCT_NAME}"
VIAddVersionKey FileVersion ${PRODUCT_VERSION}
VIAddVersionKey ProductVersion ${PRODUCT_VERSION}
VIAddVersionKey OriginalFilename "${OUT_FILE}"

InstallDir "$PROGRAMFILES\${PRODUCT_NAME}"


ShowInstDetails show
ShowUnInstDetails show

Function .onInit
  !insertmacro MULTIUSER_INIT
  ReadRegStr $R0 HKLM "${PRODUCT_UNINST_KEY}" "QuietUninstallString"
  StrCmp $R0 "" done uninst

  ;Run the uninstaller
  uninst:
  ClearErrors
  Exec '$R0' ; instead of the ExecWait line

  done:
  ${If} ${RunningX64}
    ; disable registry redirection (enable access to 64-bit portion of registry)
    SetRegView 64
    ; change install dir 
    StrCpy $INSTDIR "$PROGRAMFILES64\${PRODUCT_NAME}"
  ${Else}
    MessageBox MB_OK "${PRODUCT_NAME} needs 64-bit Windows"
    Abort
  ${EndIf}

  UserInfo::GetAccountType
  pop $0
  ${If} $0 != "admin" ;Require admin rights on NT4+
    MessageBox mb_iconstop "${PRODUCT_NAME} requires Administrator privileges"
    SetErrorLevel 740 ;ERROR_ELEVATION_REQUIRED
    Quit
  ${EndIf}
FunctionEnd

Function .onInstSuccess
  RMDir /r "$LOCALAPPDATA\${PRODUCT_NAME}"

  IfSilent startlauncher finished
  startlauncher:
    Exec '"$INSTDIR\PlaytestMate.exe"'
  finished:
FunctionEnd

Section "MainSection" SEC01
  Call EnsureNotRunning

  Delete "$INSTDIR\*.*"

  SetOutPath "$INSTDIR"
  SetOverwrite try
  File "${BUILD_DIR}\Builds.Core.dll"
  File "${BUILD_DIR}\Builds.Core.Service.Platform.Origin.dll"
  File "${BUILD_DIR}\EngineIoClientDotNet.dll"
  File "${BUILD_DIR}\INIFileParser.dll"
  File "${BUILD_DIR}\log4net.config"
  File "${BUILD_DIR}\log4net.dll"
  File "${BUILD_DIR}\log4net.xml"
  File "${BUILD_DIR}\Newtonsoft.Json.dll"
  File "${BUILD_DIR}\Newtonsoft.Json.xml"
  File "${BUILD_DIR}\PlaytestMate.Core.dll"
  File "${BUILD_DIR}\PlaytestMate.Core.dll.config"
  File "${BUILD_DIR}\PlaytestMate.exe"
  File "${BUILD_DIR}\PlaytestMate.exe.config"
  File "${BUILD_DIR}\SocketIoClientDotNet.dll"
  File "${BUILD_DIR}\WebSocket4Net.dll"
  ; PTM-1089
  File "${CERT_PATH}"
  ; end PTM-1089

  CreateDirectory "$SMPROGRAMS\${PRODUCT_NAME}"
  CreateShortCut "$SMPROGRAMS\${PRODUCT_NAME}\${PRODUCT_NAME}.lnk" "$INSTDIR\PlaytestMate.exe" "-shortcut"
  CreateShortCut "$INSTDIR\Show log files.lnk" "$WINDIR\explorer.exe" "%USERPROFILE%\Documents\PlaytestMate" "$WINDIR\system32\imageres.dll" 172

  ; PTM-1089 you can remove this once we get a proper cert
  Push "$INSTDIR\${CERT_FILE}"
  Call AddCertificateToStore
  Pop $0
  ${If} $0 != success
     MessageBox MB_OK "EA Root Certificate import failed: $0"
  ${EndIf}
  ; end PTM-1089
SectionEnd

Section -AdditionalIcons
  WriteIniStr "$INSTDIR\${PRODUCT_NAME}.URL" "InternetShortcut" "URL" "${PRODUCT_WEB_SITE}"
  CreateShortCut "$SMPROGRAMS\${PRODUCT_NAME}\Website.lnk" "$INSTDIR\${PRODUCT_NAME}.url"
  CreateShortCut "$SMPROGRAMS\${PRODUCT_NAME}\Uninstall.lnk" "$INSTDIR\uninstall.exe"
SectionEnd

Section -Post
  WriteRegStr HKLM "${PRODUCT_UNINST_KEY}" "DisplayName" "$(^Name)"
  WriteRegStr HKLM "${PRODUCT_UNINST_KEY}" "UninstallString" "$\"$INSTDIR\uninstall.exe$\""
  WriteRegStr HKLM "${PRODUCT_UNINST_KEY}" "QuietUninstallString" "$\"$INSTDIR\uninstall.exe$\" /S"
  WriteRegStr HKLM "${PRODUCT_UNINST_KEY}" "InstallLocation" "$INSTDIR"
  WriteRegStr HKLM "${PRODUCT_UNINST_KEY}" "DisplayIcon" "$INSTDIR\PlaytestMate.exe"
  WriteRegStr HKLM "${PRODUCT_UNINST_KEY}" "DisplayVersion" "${PRODUCT_VERSION}"
  WriteRegStr HKLM "${PRODUCT_UNINST_KEY}" "Publisher" "${PRODUCT_PUBLISHER}"

  WriteRegStr HKLM "${PRODUCT_INST_KEY}" "InstallPath" "$INSTDIR\PlaytestMate.exe"
  WriteRegStr HKLM "${PRODUCT_INST_KEY}" "Version" "${PRODUCT_VERSION}"

  ; estimated size
  ${GetSize} "$INSTDIR" "/S=0K" $0 $1 $2
  IntFmt $0 "0x%08X" $0
  WriteRegDWORD HKLM "${PRODUCT_UNINST_KEY}" "EstimatedSize" "$0"

  WriteRegDWORD HKLM "${PRODUCT_UNINST_KEY}" "VersionMajor" 2
  WriteRegDWORD HKLM "${PRODUCT_UNINST_KEY}" "VersionMinor" 0

  ; Runs PTM on Windows start-up
  WriteRegStr HKLM "${RUN_REG_KEY}" "PlaytestMate" "$INSTDIR\PlaytestMate.exe"

  WriteUninstaller "$INSTDIR\uninstall.exe"
SectionEnd


!macro NOTRUNNINGMACRO un
Function ${un}EnsureNotRunning
  ${DisableX64FSRedirection}
  SetOutPath "$INSTDIR"
  File ".\killProcess.ps1"
  nsExec::ExecToStack 'Powershell.exe -inputformat none -noprofile ".\killProcess.ps1"'

  ${EnableX64FSRedirection}

  Sleep 500
  performCheck:
  System::Call 'kernel32::OpenMutex(i 0x100000, b 0, t "Global\{${BUILD_TARGET} }") i .R0'
  IntCmp $R0 0 backupCheck isRunning isRunning
  backupCheck:
  System::Call 'kernel32::OpenMutex(i 0x100000, b 0, t "Global\{0}") i .R0'
  IntCmp $R0 0 notRunning isRunning isRunning
  isRunning:
  System::Call 'kernel32::CloseHandle(i $R0)'
  MessageBox MB_OKCANCEL|MB_ICONEXCLAMATION "${PRODUCT_NAME} is running. Please close it first" /SD IDCANCEL IDOK performCheck
  Abort
  notRunning:
FunctionEnd
!macroend

!insertmacro NOTRUNNINGMACRO ""
!insertmacro NOTRUNNINGMACRO "un."

Function un.onUninstSuccess
  HideWindow
  IfSilent finished
    MessageBox MB_ICONINFORMATION|MB_OK "${PRODUCT_NAME} was successfully removed from your computer."
  finished:
FunctionEnd

Function un.onInit
  !insertmacro MULTIUSER_UNINIT

  ${If} ${RunningX64}
    ; disable registry redirection (enable access to 64-bit portion of registry)
    SetRegView 64
    ; change install dir
    StrCpy $INSTDIR "$PROGRAMFILES64\${PRODUCT_NAME}"
  ${EndIf}
FunctionEnd

Var keepUserSettingsCheckbox
Var keepUserSettingsBool

Function un.ModifyUnWelcome
  ${NSD_CreateCheckbox} 120u -18u 50% 12u "Remove user settings"
  Pop $keepUserSettingsCheckbox
  SetCtlColors $keepUserSettingsCheckbox "" ${MUI_BGCOLOR}
  ${NSD_Check} $keepUserSettingsCheckbox ; Check it by default
FunctionEnd

Function un.LeaveUnWelcome
  ${NSD_GetState} $keepUserSettingsCheckbox $0
  ${If} $0 <> 0
    StrCpy $keepUserSettingsBool "True"
  ${Else}
    StrCpy $keepUserSettingsBool "False"
${EndIf}
FunctionEnd

Function un.GetMyDocs
  ReadRegStr $0 HKCU \
             "SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" \
             Personal
FunctionEnd

Section Uninstall
  Call un.EnsureNotRunning

  RMDir /r "$INSTDIR"
  RMDir /r "$INSTDIR\crashDumps"
  Delete "$SMPROGRAMS\${PRODUCT_NAME}\*.*"
  RMDir /r "$SMPROGRAMS\${PRODUCT_NAME}"
  RMDir /r "$PROGRAMFILES64\${PRODUCT_NAME}"

  StrCmp $keepUserSettingsBool "True" 0 +11
  Delete "$LOCALAPPDATA\${PRODUCT_NAME}\*.*"
  RMDir /r "$LOCALAPPDATA\${PRODUCT_NAME}"

  Call un.GetMyDocs
  RMDir /r "$0\${PRODUCT_NAME}"

  Delete "$DESKTOP\${PRODUCT_NAME}.lnk"

  DeleteRegKey HKLM "${PRODUCT_UNINST_KEY}"
  DeleteRegKey HKLM "${PRODUCT_INST_KEY}"
  DeleteRegValue HKLM "${RUN_REG_KEY}" "${PRODUCT_NAME}"

  SetAutoClose true
SectionEnd
RequestExecutionLevel管理员
!定义多用户\u执行级别管理
!定义多用户\u安装模式\u命令行
!包括多用户.nsh
!包括FileFunc.nsh
!ifndef产品版本
!定义产品_版本“0.0.0.0”
!恩迪夫
!ifndef构建目标
!定义构建目标“发布”
!恩迪夫
!定义输出文件“playtestmatestup.exe”
!如果${BUILD_TARGET}==“Debug”
!定义产品名称“Playtest Mate 2.0调试”
!定义产品\u网站\u“https://127.0.0.1:3000/"
!定义MUI_图标“.\PlaytestMate\Resources\Icons\IconRed.ico”
!恩迪夫
!如果${BUILD_TARGET}==“ReleaseTest”
!定义产品名称“Playtest Mate 2.0登台”
!定义产品\u网站\u“https://ca1-ptmstg01.ad.ea.com/"
!定义MUI_图标“.\PlaytestMate\Resources\Icons\IconBlue.ico”
!恩迪夫
!如果${BUILD_TARGET}==“Release”
!定义产品名称“Playtest Mate 2.0”
!定义产品\u网站\u“https://ca1-ptmprd01.ad.ea.com/"
!定义MUI_图标“.\PlaytestMate\Resources\Icons\IconBlack.ico”
!恩迪夫
!定义产品发布商“EA Digital Illusions CE AB”
!定义运行注册表项“软件\Microsoft\Windows\CurrentVersion\RUN”
!定义产品密钥“SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT\u NAME}”
!定义产品安装键“软件\${PRODUCT\U NAME}”
;生成目录和证书路径必须与.nsi文件相关
!定义生成目录“.\..\Bin\${BUILD\u TARGET}”
; PTM-1089
; 证书设置
!定义证书文件“ea\u root.cer”
!定义证书路径“第三方\${CERT\u FILE}”
; 完PTM-1089
!包括“MUI2.nsh”
; 64位支持
!包括x64.nsh
; 梅设置
!定义MUI_ABORTWARNING
!定义MUI_UNICON“${NSISDIR}\Contrib\Graphics\Icons\modern uninstall.ico”
; 欢迎页面
!插入宏MUI\u页面\u欢迎
; 目录页
!定义MUI\u页面\u自定义功能\u离开“目录离开”
; Instfiles页面
!insertmacro MUI_页面目录
!插入宏MUI_页面文件
; 完成页
职能总监休假
#显示消息框,然后将用户带回目录页面。
MessageBox MB|U OK | MB|U IConnexClation“由于构建大小,PTM会占用大量空间。我们建议使用除C驱动器外具有最大空间的驱动器”
功能端
函数createDesktopShortcut
CreateShortCut“$DESKTOP\${PRODUCT_NAME}.lnk”“$INSTDIR\PlaytestMate.exe”“-快捷方式”
功能端
!定义MUI\u FINISHPAGE\u SHOWREADME“”
!定义MUI_FINISHPAGE_SHOWREADME_文本“创建桌面快捷方式”
!定义MUI_FINISHPAGE_SHOWREADME_函数createDesktopShortcut
; 安装后运行PTM的选项
!定义MUI_FINISHPAGE_运行“$INSTDIR\PlaytestMate.exe”
!插入宏MUI\u页面\u完成
; 卸载程序页面
!定义MUI\u页面\u自定义功能\u显示un.MODIFY不受欢迎
!定义MUI\u页面\u自定义功能\u离开不受欢迎
!插入宏MUI_UNPAGE_欢迎
!插入宏MUI_UNPAGE_INSTFILES
; 语言文件
!插入宏MUI_语言“英语”
; 梅尾------
名称“${PRODUCT_Name}”
输出文件“${OUT\u FILE}”
VIProductVersion${PRODUCT_VERSION}
ViadVersionKey产品名称“${PRODUCT\U NAME}安装程序”
ViadVersionKey公司名称“${PRODUCT_PUBLISHER}”
ViadVersionKey文件描述“安装${PRODUCT_NAME}”
ViadVersionKey文件版本${PRODUCT_VERSION}
ViadVersionKey ProductVersion${PRODUCT_VERSION}
ViadVersionKey原始文件名“${OUT_FILE}”
InstallDir“$PROGRAMFILES\${PRODUCT_NAME}”
ShowInstDetails显示
showUnistDetails show
函数。onInit
!insertmacro多用户初始化
ReadRegStr$R0 HKLM“${PRODUCT_UNINST_KEY}”静止安装字符串
StrCmp$R0“未登录完成”
;运行卸载程序
联合国:
明显错误
执行官“$R0”;而不是ExecWait行
完成:
${If}${RunningX64}
; 禁用注册表重定向(启用对注册表64位部分的访问)
SetRegView 64
; 更改安装目录
StrCpy$INSTDIR“$PROGRAMFILES64\${PRODUCT_NAME}”
${Else}
MessageBox MB_OK“${PRODUCT_NAME}需要64位窗口”
中止
${EndIf}
UserInfo::GetAccountType
流行音乐$0
${If}$0!=“管理”;需要NT4上的管理员权限+
MessageBox mb_iconstop“${PRODUCT_NAME}需要管理员权限”
设置错误级别740;错误\u需要仰角\u
退出
${EndIf}
功能端
函数。oninstancesuccess
RMDir/r“$LOCALAPPDATA\${PRODUCT_NAME}”
如果阿姨做完了
阿姨:
Exec“$INSTDIR\PlaytestMate.exe”
完成:
功能端
章节“主要章节”SEC01
固定耳轴
删除“$INSTDIR\*.*”
设置输出路径“$INSTDIR”
设置覆盖尝试
文件“${BUILD\u DIR}\Builds.Core.dll”
文件“${BUILD\u DIR}\Builds.Core.Service.Platform.Origin.dll”
文件“${BUILD\u DIR}\EngineIoClientDotNet.dll”
文件“${BUILD\u DIR}\INIFileParser.dll”
文件“${BUILD_DIR}\log4net.config”
文件“${BUILD_DIR}\log4net.dll”
文件“${BUILD_DIR}\log4net.xml”
文件“${BUILD\u DIR}\Newtonsoft.Json.dll”
文件“${BUILD\u DIR}\Newtonsoft.Json.xml”
文件“${BUILD\u DIR}\PlaytestMate.Core.dll”
文件“${BUILD\u DIR}\PlaytestMate.Core.dll.config”
文件“${BUILD\u DIR}\PlaytestMate.exe”
文件“${BUILD\u DIR}\PlaytestMate.exe.config”
文件“${BUILD\u DIR}\SocketIoClientDotNet.dll”
文件“${BUILD_DIR}\WebSocket4Net.dll”
; PTM-1089
文件“${CERT\u PATH}”
; 完PTM-1089
CreateDirectory“$SMPROGRAMS\${PRODUCT_NAME}”
CreateShortCut“$SMPROGRAMS\${PRODUCT\U NAME}\${PRODUCT\U NAME}.lnk”“$INSTDIR\PlaytestMate.exe”“-快捷方式”
CreateShortCut“$INSTDIR\Show log files.lnk”“$WINDIR\explorer.exe”“%USERPROFILE%\Documents\PlaytestMate”“$WINDIR\system32\imageres.dll”172
; PTM-1089一旦我们获得正确的证书,您就可以删除此项
推送“$INSTDIR\${CERT\u FILE}”
调用AddCertificateToStore
流行音乐$0
${If}$0!=成功
MessageBox MB_OK“EA根证书导入失败:$0”
${EndIf}
; 完PTM-1089
分段结束
第节-附加图标
WriteIniStr“$INSTDIR\${PRODUCT_NAME}.URL”“Internet快捷方式”“URL”
WriteRegStr HKLM "${PRODUCT_UNINST_KEY}" "UninstallString" `"$INSTDIR\uninstall.exe"`
WriteRegStr HKLM "${PRODUCT_UNINST_KEY}" "QuietUninstallString" `"$INSTDIR\uninstall.exe" /S`