【问题标题】:NSIS uninstaller privileges according to installer根据安装程序的 NSIS 卸载程序权限
【发布时间】:2015-02-06 00:04:39
【问题描述】:

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

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

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

【问题讨论】:

    标签: nsis privileges uninstallation


    【解决方案1】:

    您必须自己实施此检查。您可以在安装程序中使用 UserInfo 插件check if you are admin,然后将结果存储在 .ini、注册表或 append 信息到卸载程序.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
    

    【讨论】:

    • 感谢您在卸载程序中存储信息的非常有用的建议,因为我目前不编写任何注册表项。如果安装程序在管理员模式下运行,卸载程序是否可以有条件地执行“RequestExecutionLevel admin”,有什么想法吗?
    猜你喜欢
    • 2017-11-15
    • 2012-01-26
    • 1970-01-01
    • 2014-08-27
    • 2022-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-12
    相关资源
    最近更新 更多