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

时间:2014-12-08 10:45:05

标签: nsis privileges uninstaller

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

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

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

1 个答案:

答案 0 :(得分:3)

您必须自己实施此检查。您可以使用UserInfo插件在安装程序中check if you are admin,然后将结果存储在.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