当我遇到此问题时,我尝试使用Inno Setup创建安装程序,其他所有内容都已安装,但是当前用户未安装注册表项。我找到了这个有用的话题(非常感谢!):
Inno Setup Creating registry key for logged in user (not admin user)
这解决了添加注册表项的部分,如下所示:
[Run]
Filename: reg.exe; \
Parameters: "ADD ""HKCU\Software\myprinter"" /v OutputFile /t REG_SZ /d ""{localappdata}\temp\\"""; \
Flags: runasoriginaluser runhidden
我的问题:
{localappdata}
是指管理员用户(管理员)而不是本地用户(测试):
它补充说: HKCU \ Software \ myprinter OutputFile REG_SZ c:\ users \ admin \ appdata \ local \ temp \
是必需的: HKCU \ Software \ myprinter OutputFile REG_SZ c:\ users \ test \ appdata \ local \ temp \
该软件不起作用,因为不允许使用admin temp(当然)
虽然根据在线帮助它应该对启动设置的用户起作用,但在我的情况下似乎没有。 (有或没有postinstall
标志)
runasoriginaluser
仅在[运行]部分有效。如果指定了这个标志而且 系统运行Windows Vista或更高版本,生成的进程将 使用该用户的(通常是非提升的)凭证执行 最初启动安装程序(即" UAC前对话框"凭据)。
这是使用postinstall标志时的默认行为。
如果用户通过右键单击其EXE文件并选择来启动安装程序 "以管理员身份运行",不幸的是,这个标志将没有 效果,因为安装程序没有机会运行任何代码 原始用户凭据。如果从中启动安装程序,情况也是如此 一个已经升级的过程。但请注意,这不是Inno 特定于设置的限制;基于Windows Installer的安装程序不能 在这种情况下,请返回原始用户凭据。
此标志不能与runascurrentuser标志组合使用。
注意:运行Inno Setup:5.5.9(a)和Windows 10
答案 0 :(得分:0)
首先,你的方法不正确。
有两种正确的方法:
如果安装程序仅为当前(非特权用户)安装应用程序,则不需要管理员权限。使用PrivilegesRequired=lowest
。
PrivilegesRequired=lowest
然后{localappdata}
constant(及类似)会正确引用当前用户的文件夹。
如果安装程序为所有用户安装应用程序,则更新某个特定用户的注册表是没有意义的。所有用户都需要注册表设置,而不仅仅是注册表设置。在这种情况下,建议的方法是在HKLM
中设置常用注册表设置(或将设置存储到某个公共文件)。并让应用程序在第一次运行时将设置复制到用户注册表配置单元。
您还可以允许用户在这两种方法之间进行选择 请参阅Make Inno Setup installer request privileges elevation only when needed。
有关类似问题,请参阅
无论如何,{localappdata}
常量由Inno安装过程解决,在管理员帐户上下文中运行。并且解析不会受runasoriginaluser
标志的影响。
但是您可以使用等效的%LOCALAPPDATA%
环境变量,该变量将由执行过程解析,即在原始用户中#34;上下文。
要允许环境变量解析,您需要通过cmd.exe
执行命令。
[Run]
Filename: {cmd}; \
Parameters: "/C reg.exe ADD ""HKCU\Software\myprinter"" /v OutputFile /t REG_SZ /d ""%LOCALAPPDATA%\temp\\"""; \
Flags: runasoriginaluser runhidden
有关其他方法,请参阅Inno Setup - Access unprivileged account folders from installer that requires privileges。