关于创建(Inno Setup)安装程序的一个非常常见的问题是围绕从使用提升/管理员权限运行的安装程序访问/修改特定用户(当前登录用户)的配置文件.
这样做有许多缺点,并且容易出错.
所有现有的答案都包含问题的一部分(注册表,文件,桌面图标等).这个问题的目的是通过所有可能的方法收集解决全球问题的答案.
Inno Setup 没有任何内置机制来从以提升/管理员权限运行的安装程序访问或修改用户环境。
实现这一目标的所有尝试都依赖于以下技巧:
runasoriginaluser标志或ExecAsOriginalUser功能。一些例子:
修改或访问登录用户的注册表:
Inno Setup 为登录用户(非管理员用户)创建注册表项或
如何从以管理员身份运行的 Inno Setup 安装程序中读取登录用户的注册表 HKCU
访问AppData登录用户的文件夹:
Inno Setup 始终安装到 admin 的 AppData 目录或
Inno Setup 使用 {localappdata} 登录用户或
Inno Setup - 将用户文件放在 admin 文档中。
或使用{user*} 常量。
尽管这些并不可靠,但至少出于以下原因:
当前用户没有管理员权限时,他需要在安装程序 UAC 提示中输入管理员凭据。这会将安装程序切换到不同的用户。因此{user*}常量不会指代启动安装的用户。
当用户以提升的权限显式运行安装程序时,例如通过右键单击安装程序并选择“以管理员身份运行”或从另一个提升的应用程序(文件管理器)运行它,runasoriginaluser标志或ExecAsOriginalUser功能的“原始用户”将已被提升.
在企业环境中,应用程序由管理员安装,管理员不是将使用应用程序的用户。
此问题唯一正确的通用解决方案是仅将用户环境的设置推迟到实际用户会话。
最简单的方法是让应用程序自己在第一次运行时进行设置。
安装程序只能部署应用程序可用于安装的共享文件。
如果由于某种原因无法修改应用程序,则必须迭代所有帐户并修改它们:
如果您需要确保将设置分发到仅在安装后创建的帐户,请参阅如何在 Inno Setup 中为每个用户(包括未来的新用户)安装文件?
如果您对仅为登录用户设置应用程序这一事实感到满意,请使用PrivilegesRequired=lowest:
[Setup]
PrivilegesRequired=lowest
Run Code Online (Sandbox Code Playgroud)
然后{user*}常量将正确引用当前用户的文件夹。
如果安装的某些子任务仍然需要管理员权限,则只能为子任务请求权限提升:
如果您想通过以管理员权限显式运行安装程序来防止用户破坏这一点,请参阅
或者您可以通过编程方式找出当前 Windows 登录会话的帐户是什么:
| 归档时间: |
|
| 查看次数: |
1683 次 |
| 最近记录: |