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

问题描述 投票:0回答:3

当我遇到这个问题时,我正在尝试使用Inno setup创建一个安装程序,其他所有东西都在安装,但是注册表项没有安装在当前用户中,我在

HKEY_CURRENT_USER
中找不到它。但是当我尝试以管理员身份运行
regedit
时,注册表已安装在那里。我已打开 UAC 并使用管理员帐户验证安装是否可以运行,为什么会发生这种情况?

这是我的

Registry
部分

[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

installation registry inno-setup regedit
3个回答
5
投票

我认为您不能显式写入从 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。但请注意,如果用户明确以管理员身份运行安装程序,则这将不起作用,因为“原始”用户已经是管理员了。有关该问题的一般讨论,请参阅 从以管理员身份运行的 Inno Setup 安装程序为当前登录的用户安装应用程序


2
投票

[Run]
部分:

Filename: reg.exe; Parameters: "IMPORT ..." and flag: runascurrentuser

1
投票

从您问题的措辞来看,这听起来像是因为您正在“使用管理员帐户验证安装的运行”。如果是这种情况,并且您在 UAC 提示符下输入不同的帐户(与登录时使用的帐户不同),则当前用户实际上将成为您刚刚在 UAC 提示符下输入的管理员帐户,而不是您登录的帐户与.您可能需要做的是使用

runasoriginaluser
功能,它将使用登录的用户凭据,而不是您在 UAC 提示符下输入的帐户。

© www.soinside.com 2019 - 2024. All rights reserved.