我有一个我编写的备份应用程序,我需要它在启动时运行,始终为所有用户。我想用
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值,我不知道为什么。
答案 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
下的以下条目:
换句话说,问题中的代码已经有效。