1

私が作成したバックアップ アプリケーションがあり、常にすべてのユーザーに対して起動時に実行する必要があります。使いたい

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値を追加していないため、理由がわかりません。

4

2 に答える 2

1

コードは 32 ビット プロセスで実行されます。そのため、レジストリ リダイレクタの影響を受けます。これは、レジストリの特定の部分の 32 ビット ビューと 64 ビット ビューを別々に維持するテクノロジです。

これが実装される方法は、 の 32 ビット ビューが のHKLM\Software下に格納されることHKLM\Software\Wow6432Nodeです。そして、レジストリの書き込みがリダイレクトされる場所です。

KEY_WOW64_64KEYこれで、フラグを使用して、レジストリの 64 ビット ビューへの書き込みを選択できるようになりました。ただし、その必要はありません。レジストリの 32 ビット ビューに書き込むだけです。ユーザーがログオンすると、WindowsSoftware\Microsoft\Windows\CurrentVersion\Runはレジストリの 32 ビット ビューと 64 ビット ビューの両方からスタートアップ アプリを処理します。

多くのプログラムがこれを行います。私のマシンを見ると、次のエントリが の下に表示されますSOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Run

  • アップルプッシュ
  • iTunesヘルパー
  • QuickTime タスク
  • DivXアップデート
  • SunJavaUpdate

つまり、問題のコードは既に機能しています。

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

問題を解決しました。上記のコードが必要です。

于 2013-03-24T04:23:44.027 に答える