2013-03-24 99 views
0

我有一個備份應用程序,我寫了,我需要它啓動時運行,總是爲所有用戶。我想使用Delphi寫入HKEY LOCAL MACHINE

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值,我不知道爲什麼。

回答

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

解決了這個問題。上面的代碼是必需的。

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

換句話說,代碼在問題已經起作用。