根据安装程序的 NSIS 卸载程序权限

标签 nsis privileges uninstallation

我有一个应用程序的 NSIS 安装程序,可以作为普通用户运行。但如果用户想要安装到“Program Files”目录中,仍然可以通过以管理员权限启动安装程序来完成。

现在我遇到了问题,即使以管理员身份进行安装,卸载程序也会默认以用户权限启动。这会导致卸载无提示地失败。更糟糕的是:它甚至指出卸载过程成功,但无法删除任何文件。

我的问题是:是否可以在安装过程中创建卸载程序,它需要(或者更好:请求自身)与安装过程相同的权限?

最佳答案

您必须自己执行此检查。您可以check if you are admin在带有 UserInfo 插件的安装程序中,然后将结果存储在 .ini、注册表或 append 中uninstaller.exe 的信息:

InstallDir $temp\instdir

Section

UserInfo::GetAccountType
Pop $0
StrCmp $0 "Admin" 0 +2
StrCpy $0 1
IntOp $0 $0 & 1 ; $0 is now 1 if admin or 0 if not

SetOutPath $InstDir
WriteUninstaller "$InstDir\Uninstall.exe"
FileOpen $1 "$InstDir\Uninstall.exe" a
FileSeek $1 0 END
FileWriteByte $1 $0
FileClose $1

SectionEnd


Section Uninstall

FileOpen $1 "$ExePath" r
FileSeek $1 -1 END
FileReadByte $1 $0
FileClose $1
DetailPrint "Installer was admin: $0"

SectionEnd

关于根据安装程序的 NSIS 卸载程序权限,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27356210/

相关文章:

docker - 如何卸载Docker Trusted Registry(DTR)?

installation - Web 安装构建器软件

nsis - NSIS 安装程序中的版本比较

delphi - NSIS 插件 "nsScreenshot"在 Windows NT 6.x 中无法工作

postgresql 特权确保插入仅通过函数完成

c++ - 如何在 VC++ 中禁用 Windows TCP/IP 堆栈 [以编程方式]

64-bit - 在x64系统中从NSIS安装程序安装驱动程序

具有从 '%' 登录权限的 Mysql 用户无法从 'localhost' 登录

linux - 如何从进程中获取root权限

java - 卸载/安装 JDK