使用{localappdata}登录用户的Inno设置

鳗鱼

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

马丁·普里克里(Martin Prikryl)

首先,您的方法不正确。

有两种正确的方法:

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

    PrivilegesRequired=lowest
    

    然后,{localappdata} 常量(和类似常量)将正确地引用当前用户的文件夹。

  2. 如果安装程序为所有用户安装了该应用程序,则更新一个特定用户的注册表是没有意义的。所有用户都需要注册表设置,而不仅仅是注册表设置。在这种情况下,建议的方法是在中设置通用注册表设置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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何使用Spring 3.2 New MVC Testing登录用户

使用SessionRegistry登录用户

如何使用JDBCRealm获得登录用户的用户名?

使用Quarkus手动登录用户

如何使用Laravel 5登录用户

使用Spring Security获取服务层中的登录用户

使用登录用户在Flask App上运行Selenium测试

如何使用登录用户的AccessToken实例化Microsoft GraphClient?

测试使用令牌登录用户和SimpleTokenAuthentication失败,因为SimpleTokenAuthentication未登录用户

如何使用Firebase Google登录获取登录用户的属性?

如何使用oauth2静默登录用户?

如何使用ssh在桌面屏幕上登录用户

如何找到使用巫术的登录用户?

如何在Laravel中使用主密码登录用户?

如何使用Shell脚本登录用户

在Windows中如何在git bash中使用%LocalAppData%?

是否为指定用户删除%LOCALAPPDATA%中的所有* .auc文件的批处理文件?

使用MySQL查询从登录用户中选择数据

如何使用表格登录用户?

使用厨师创建无登录用户

Rails:无法使用Devise登录用户

如何正确设置localappdata路径,而不显示完整路径(Path.Combine&Environment.GetFolderPath)

如何使用 RemoveFolderEx 在安装和卸载时递归删除 LocalAppData 中的文件夹

如何使用 FCM 定位登录用户?

使用 GET 请求验证和登录用户

使用 Azure AD 登录用户

如何使用Swiftui从firebase获取登录用户的名字?

使用 Firebase 身份验证登录用户

使用 Expressjs 显示同时登录用户的用户发票