遇到此问题时,我正在尝试使用 Inno Setup 创建安装程序,其他所有内容都在安装,但注册表项未安装在当前用户中。我发现了这个有用的主题(非常感谢!
Inno 设置 为登录用户(非管理员用户)创建注册表项
这解决了添加注册表项的问题,如下所示:
[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\
该软件无法工作,因为它不允许使用管理员临时(当然)
尽管根据在线帮助,它应该适用于启动安装程序的用户,但就我而言,似乎并非如此。(带或不带安装后配置
标志)
runasoriginaluser
仅在[运行]部分有效。如果指定了此标志,并且系统运行的是Windows Vista或更高版本,则衍生的进程将使用最初启动安装程序的用户的(通常为非提升的)凭据(即“UAC对话前”凭据)来执行。
这是使用postinstall标志时的默认行为。
如果用户通过右键单击其EXE文件并选择“以管理员身份运行”来启动安装程序,那么不幸的是,此标志将无效,因为安装程序没有机会使用原始用户凭据运行任何代码。如果安装程序是从已经提升的进程启动的,情况也是如此。但是请注意,这不是Inno安装程序特定的限制;在这种情况下,基于Windows安装程序的安装程序也不能返回到原始用户凭据。
此标志不能与runascurrentuser标志结合使用。
注意:运行Inno Setup:5.5.9(a)和Windows 10
首先,你的方法不正确。
有两种正确的方法:
>
如果安装程序仅为当前(非特权)用户安装应用程序,则不需要管理员权限。使用PrivilegesRequired=最低
。
PrivilegesRequired=lowest
然后,<code>{localappdata}</code>常量(和类似的)将正确引用当前用户的文件夹。
如果安装程序为所有用户安装应用程序,则更新某个特定用户的注册表是没有意义的。所有用户都需要注册表设置,而不仅仅是一个。在这种情况下,推荐的方法是在< code>HKLM中设置通用注册表设置(或将设置存储到某个通用文件中)。并让应用程序在第一次运行时将设置复制到用户注册表配置单元。
另请参阅当用户使用“以管理员身份运行”时,如何使用安装程序写入用户的我的文档目录。
您还可以允许用户在这两种方法之间进行选择。< br >请参见使Inno Setup安装程序仅在需要时请求权限提升。
这个问题从更广泛的角度涵盖了这个主题:
从以管理员身份运行的Inno安装程序为当前登录的用户安装应用程序
有关类似问题,请参见
无论如何,{localappdata}
常量由Inno Setup进程解析,在Administrator帐户上下文中运行。并且解析决不受runasoriginaluser
标志的影响。
但是您可以使用等效的 %LOCALAPPDATA%
环境变量,该变量将由执行的进程解析,即在“原始用户”上下文中。
要允许环境变量解析,您需要通过< code>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-从需要权限的安装程序中访问非特权帐户文件夹。
我有两个二进制文件,必须为它们创建一个服务。我尝试了一个解决方案,使用“SC创建”从如何安装Windows服务与Inno安装?
我创建了这个简单的脚本: 通知?它为什么要将其安装到Windows文件夹中? 我如何指定我真正想要安装文件的文件夹?
我目前正在使用React在一个网站上工作,我希望能够有用户登录。现在,我的策略是在提交时将表单数据发送到服务器(express),如果信息与我的数据库中的用户匹配,服务器将发回一个签名的JWT,其中没有敏感信息(只有用户名)。 一旦客户机接收到JWT,我就将它添加到localStorage中,并将它的解码数据添加到redux存储中。我计划让我的redux存储当前登录的用户。
我使用Inno Setup 6. x的目标是在代码中自定义文本,即Pascal Script。我使用Pascal Script的原因是我只想在为真时自定义/更改标签。我该怎么做? 以下两种方法不起作用: > 使用脚本常量: 这显示的是“{code:GetFinishedLabel}”,而不是“BLA”。 在< code>InitializeWizard中自定义向导。 完整(失败)示例: 仍然显示中
我想首先将现有文件“我的程序旧”重命名为“我的程序v2”,但前提是“我的程序v2”还不存在。 然后我想将“我的程序”重命名为“我的程序旧”,但前提是“我的程序旧”不存在。 然后我想从安装程序安装‘我的程序',但前提是’我的程序‘还不存在。 我将非常感谢任何指导!