德尔福写作HKEY LOCAL MACHINE

时间:2013-03-24 03:42:09

标签: delphi delphi-2010

我有一个我编写的备份应用程序,我需要它在启动时运行,始终为所有用户。我想用

key := '\Software\Microsoft\Windows\CurrentVersion\Run';
Reg := TRegIniFile.Create;
try
  Reg.RootKey:=HKEY_LOCAL_MACHINE;
  Reg.CreateKey(Key);
  if Reg.OpenKey(Key,False) then Reg.WriteString(key, 'Backup', 'c:\backup.exe');
finally
  Reg.Free;
end;

我已经编写了一个清单并将其添加为资源,每次运行时都要求管理员权限。但是,它没有添加reg值,我不知道为什么。

2 个答案:

答案 0 :(得分:1)

Reg := TRegistry.Create(KEY_WRITE OR KEY_WOW64_64KEY);

解决了这个问题。上面的代码是必需的。

答案 1 :(得分:1)

您的代码以32位进程运行。因此它受registry redirector的约束。这是在注册表中维护某些部分的32位和64位视图的技术。

实现此方法的方法是HKLM\Software的32位视图存储在HKLM\Software\Wow6432Node下。这就是您的注册表写入被重定向到的地方。

现在,您可以选择使用KEY_WOW64_64KEY标志写入注册表的64位视图。但是,没有必要这样做。您只需写入注册表的32位视图即可。当用户登录Windows时,从注册表的32位和64位视图处理Software\Microsoft\Windows\CurrentVersion\Run启动应用程序。

许多程序都这样做。看着我的机器,我可以看到SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Run下的以下条目:

  • Apple Push
  • iTunesHelper
  • QuickTime任务
  • DivXUpdate
  • SunJavaUpdate

换句话说,问题中的代码已经有效。