installation - 在 Inno Setup 中为登录用户(非管理员用户)创建注册表项

标签 installation registry inno-setup regedit

当我遇到这个问题时,我正在尝试使用 Inno setup 创建一个安装程序,其他所有内容都正在安装,但注册表项没有安装在当前用户中,我在 中找不到它HKEY_CURRENT_USER。但是当我尝试以管理员身份运行regedit时,注册表就安装在那里了。我已打开 UAC 并使用管理员帐户验证安装是否可以运行,为什么会发生这种情况?

这是我的注册表部分

[Registry]
Root: HKCU; Subkey:Software; Flags: uninsdeletekey; ValueName:ABS; ValueType:string; ValueData:ABS;
Root: HKCU; Subkey:Software\Microsoft\Office\Word\Addins\ABS.ScriptManager; Flags: uninsdeletekey;
Root: HKCU; Subkey:Software\Microsoft\Office\Word\Addins\ABS.ScriptManager; ValueName:Description; ValueType:string; ValueData:Script Manager; Flags: uninsdeletekey;

注意:我运行的是 32 位 Windows 7

最佳答案

我认为您不能显式写入从 Inno Setup 登录的用户的注册表项。您只能写入运行安装程序的用户的注册表项。

您可以通过 HKEY_USERS 写入任何(或所有)用户的注册表项,但我不知道(如果您知道的话)哪个用户已登录。

<小时/>

但是您可以执行一个外部应用程序,该应用程序在安装过程中使用runasoriginaluser写入注册表项。标志或 ExecAsOriginalUser功能。

您可以使用reg.exe为此:

[Run]
Filename: reg.exe; \
    Parameters: "ADD HKCU\Software\MyProgram /v Foo /t REG_SZ /d Bar"; \
    Flags: runasoriginaluser runhidden

procedure CurStepChanged(CurStep: TSetupStep);
var
  Params: string;
  ResultCode: Integer;
begin
  if CurStep = ssPostInstall then
  begin
    Log('Adding registry key for original user');
    Params := 'ADD HKCU\Software\xxxx /v Foo /t REG_SZ /d Bar';
    if ExecAsOriginalUser(
         'reg.exe', Params, '', SW_HIDE, ewWaitUntilTerminated, ResultCode) and
       (ResultCode = 0) then
    begin
      Log('Added registry key for original user');
    end
      else
    begin
      Log('Error adding registry key for original user');
    end;
  end;
end;

该想法的来源:@Markus 。但请注意,如果用户明确以管理员身份运行安装程序,则这将不起作用,因为“原始”用户已经是管理员了。有关该问题的一般讨论,请参阅 Installing application for currently logged in user from Inno Setup installer running as Administrator

关于installation - 在 Inno Setup 中为登录用户(非管理员用户)创建注册表项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28824766/

相关文章:

centos - 如何在centos上安装mke2fs?

.net-3.5 - 如何判断是否安装了 .NET 3.5 SP1?

c# - 如何更改 Windows 用户的区域设置/日期格式?

python - 如何在 python 3.4 中读取 winreg 中的 reg_qword ?

installation - InnoSetup,展开环境变量(使用 {reg :. ..} 从注册表值获取)

windows - Inno Setup 用户主页路径

python - 命令 "python setup.py egg_info"失败,错误代码为 1 in/tmp/pip-build-hn4hol_z/spacy/

markdown - Emacs markdown 模式预览时出现错误 : "bin/bash: markdown: command not found"

C++ - 从注册表读取的值中获取空值

inno-setup - 如何在Inno Setup中获取本地日期时间?