当我遇到此问题时,我尝试使用Inno设置创建安装程序,其他所有内容都已安装,但是当前用户未安装注册表项,我无法在其中找到它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
答案 0 :(得分:1)
我认为您不能从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
答案 1 :(得分:0)
根据您问题的措辞,听起来这是因为您“正在使用管理员帐户验证要运行的安装”。如果是这种情况,并且您在UAC提示符下输入了另一个帐户(来自您登录的帐户),则当前用户实际上将成为您刚刚在UAC提示下输入的管理员帐户,而不是您记录的帐户在...您可能需要做的是使用runasoriginaluser
函数,该函数将使用登录的用户凭据而不是您在UAC提示符下输入的帐户。
答案 2 :(得分:-1)
: 文件名:reg.exe;参数:“IMPORT ...”和flag:runascurrentuser!