Inno Setup使用{localappdata}登录用户

时间:2016-11-15 15:25:25

标签: inno-setup

当我遇到此问题时,我尝试使用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

1 个答案:

答案 0 :(得分:0)

首先,你的方法不正确。

有两种正确的方法:

  1. 如果安装程序仅为当前(非特权用户)安装应用程序,则不需要管理员权限。使用PrivilegesRequired=lowest

    PrivilegesRequired=lowest
    

    然后{localappdata} constant(及类似)会正确引用当前用户的文件夹。

  2. 如果安装程序为所有用户安装应用程序,则更新某个特定用户的注册表是没有意义的。所有用户都需要注册表设置,而不仅仅是注册表设置。在这种情况下,建议的方法是在HKLM中设置常用注册表设置(或将设置存储到某个公共文件)。并让应用程序在第一次运行时将设置复制到用户注册表配置单元。

    另见How to write to the user's My Documents directory with installer when the user used 'Run As Administrator'

  3. 您还可以允许用户在这两种方法之间进行选择 请参阅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