遇到此问题时,我正在尝试使用Inno Setup创建安装程序,正在安装所有其他程序,但是当前用户中未安装注册表项。我发现了这个有用的主题(非常感谢!):
Inno Setup为登录用户(非管理员用户)创建注册表项
这样就解决了添加注册表项的部分,如下所示:
[Run]
Filename: reg.exe; \
Parameters: "ADD ""HKCU\Software\myprinter"" /v OutputFile /t REG_SZ /d ""{localappdata}\temp\\"""; \
Flags: runasoriginaluser runhidden
我的问题:
{localappdata}
是指管理员用户(admin)而不是本地用户(test):
它添加了: HKCU \ Software \ myprinter OutputFile REG_SZ c:\ users \ admin \ appdata \ local \ temp \
需要: HKCU \ Software \ myprinter OutputFile REG_SZ c:\ users \ test \ appdata \ local \ temp \
该软件不起作用,因为不允许使用管理临时文件(当然)
尽管根据联机帮助,它应该对启动安装程序的用户有效,但就我而言,似乎不起作用。(带有或不带有postinstall
标志)
运行原始用户
仅在[运行]部分有效。如果指定了此标志,并且系统运行的是Windows Vista或更高版本,则将使用最初启动安装程序的用户的凭据(通常是非提升的凭据)(即“ UAC之前的对话框”凭据)执行生成的过程。
使用postinstall标志时,这是默认行为。
如果用户通过右键单击其EXE文件并选择“以管理员身份运行”来启动安装程序,那么不幸的是,此标志将无效,因为安装程序没有机会使用原始用户凭据运行任何代码。如果安装程序是从已经提升的进程中启动的,则情况也是如此。但是请注意,这不是Inno Setup的特定限制;在这种情况下,基于Windows Installer的安装程序都无法返回到原始用户凭据。
该标志不能与runascurrentuser标志结合使用。
注意:运行Inno Setup:5.5.9(a)和Windows 10
首先,您的方法不正确。
有两种正确的方法:
如果安装程序仅为当前(非特权)用户安装应用程序,则不需要管理员特权。使用PrivilegesRequired=lowest
。
PrivilegesRequired=lowest
如果安装程序为所有用户安装了该应用程序,则更新一个特定用户的注册表是没有意义的。所有用户都需要注册表设置,而不仅仅是注册表设置。在这种情况下,建议的方法是在中设置通用注册表设置HKLM
(或将设置存储到某个通用文件中)。并让应用程序在第一次运行时将设置复制到用户注册表配置单元中。
您还可以允许用户在这两种方法之间进行选择。仅在需要时,
请参阅使Inno Setup安装程序请求特权提升。
如有类似问题,请参阅
无论如何,该{localappdata}
常量由Inno Setup进程解析,该进程在Administrator帐户上下文中运行。并且解析绝不会受到该runasoriginaluser
标志的影响。
但是您可以使用等效的%LOCALAPPDATA%
环境变量,该变量将由执行的过程来解决,即在“原始用户”上下文中。
要允许环境变量解析,您需要通过执行命令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-从需要特权的安装程序访问非特权帐户文件夹。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句