1

I have a back up application that I wrote and I need it to run on start up, always for all users. I want to use

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;

I have written a manifest and added it as a resource, It asks for admin privileges every time it runs. However, it is not adding the the reg value and I am not sure why.

4

2 回答 2

1

您的代码在 32 位进程中运行。因此,它受注册表重定向器的约束。这是维护注册表某些部分的单独的 32 位和 64 位视图的技术。

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

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

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

  • 苹果推送
  • iTunes助手
  • QuickTime 任务
  • DivXUpdate
  • SunJava更新

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

于 2013-03-24T15:19:32.977 回答
1
Reg := TRegistry.Create(KEY_WRITE OR KEY_WOW64_64KEY);

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

于 2013-03-24T04:23:44.027 回答