Прежде всего вам нужно иметь права администратора, чтобы писать там. В основном это просто установщики, которые пишут в этот ключ, и они обычно работают с повышенными правами. Добавьте это в манифест своего приложения, если вы хотите именно так:
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
<security>
<requestedPrivileges>
<requestedExecutionLevel
level="requireAdministrator"
uiAccess="false"/>
</requestedPrivileges>
</security>
</trustInfo>
Если эта запись в HKLM
выполняется из приложения, которое иначе не требует повышения прав, тогда рассмотрите возможность разделения записи в HKLM
в отдельный процесс, чтобы только запись этого раздела реестра требовала повышения прав. Это лучшая практика с UAC.
Еще одна вещь, которая может вас укусить, это то, что ваше Delphi-приложение будет 32-разрядным и поэтому будет перенаправлено в реестр. Доступ HKLM\Software
будет перенаправлен на HKLM\Software\Wow6432Node
.
В 64-битной системе я думаю, что вы должны попытаться записать в HKLM\Software
, поэтому вам нужно отключить перенаправление. Сделайте это, включив KEY_WOW64_64KEY
в свойство Access
вашего TRegistry
экземпляра.
Windows объединит оба представления реестра при обработке ключей Run
и RunOnce
, но ваше приложение оставит более четкие следы, если вы запишете в 64-битную область реестра для этого конкретного ключа.