2016-11-15 209 views
1

我尝试使用Inno安装程序创建安装程序,当我遇到此问题时,一切正在安装,但注册表项没有安装在当前用户中。我发现这是很有帮助的话题(非常感谢!):
Inno Setup Creating registry key for logged in user (not admin user)Inno设置为登录用户使用{localappdata}

这解决了部分添加注册表项,像这样:

[Run] 
Filename: reg.exe; \ 
    Parameters: "ADD ""HKCU\Software\myprinter"" /v OutputFile /t REG_SZ /d ""{localappdata}\temp\\"""; \ 
    Flags: runasoriginaluser runhidden 

我的问题:
{localappdata}指管理员用户(管理员)不是本地用户(测试):

它补充说: HKCU \ SOFTWARE \ myprin之三OUTPUTFILE REG_SZ C:\用户\ ADMIN \应用程序数据\本地\ TEMP \

是必需的: HKCU \ SOFTWARE \ myprinter OUTPUTFILE REG_SZ C:\用户\测试\应用程序数据\本地\ TEMP \

该软件不起作用,因为它不允许使用管理员临时(当然)

虽然根据在线帮助,它应该为开始设置的用户工作,它似乎没有,对我来说。 (具有或不具有postinstall标志)

runasoriginaluser

仅在[运行]部分有效。如果指定了此标志,并且系统运行的是Windows Vista或更高版本,则生成的进程将使用 最初开始安装的用户(通常未提升的)凭证执行 (即,“UAC之前对话”凭证)。

这是使用postinstall标志时的默认行为。

如果用户通过右键单击它的EXE文件并选择“以管理员身份运行” 启动安装程序,那么这个标志,不幸的是,不会有任何 效果,因为安装程序没有机会运行带有 原有的任何代码用户凭证。如果安装程序从 已启动的进程启动,则情况也是如此。但请注意,这不是Inno 安装程序特定的限制;在这种情况下,基于Windows Installer的安装程序不能返回到原始用户凭证。

该标志不能与runascurrentuser标志组合。

注意:在运行Inno Setup的:5.5.9(一)和Windows 10

+0

不要使用创新安装的ANSI版本,使用Unicode版本。 –

回答

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'

您还可以允许用户在这两种方法之间进行选择。
请参阅Make Inno Setup installer request privileges elevation only when needed

对于类似的问题,请参见


反正{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 - Access unprivileged account folders from installer that requires privileges

+0

嗨马丁,非常感谢您的回复。 1.不可能,因为我需要开始安装过程。 2.我的程序不是第一个被执行的程序。它只有在注册表项设置正确时才能正常运行。 建议的解决方案确实有效!非常感谢:-) – eelcos

+0

1.如果单个(授权)用户在安装应用程序而已,你可以把它安装到用户的个人资料。这样,您不需要安装的管理权限。 2.这是设计应用程序时应该考虑的事情。 –