Вы делаете некоторые серьезные ошибки при использовании TRegistry
.
Вы не указываете никаких прав Access
, поэтому по умолчанию используется KEY_ALL_ACCESS
, что разрешено только администраторам.Администраторы в Vista и более поздних версиях не имеют полных прав администратора, как в XP.Убедитесь, что ваше приложение работает в повышенном состоянии, если включен контроль учетных записей.Либо щелкните правой кнопкой мыши по файлу .exe и выберите «Запуск от имени администратора», либо присвойте вашему .exe манифест UAC, в котором указано «requiredExecutionLevel = requireAdministrator».Если вы не хотите, чтобы ваше основное приложение запускалось с повышенными правами, переместите логику реестра в отдельный объект .exe или COM, который затем можно будет запускать с повышенными правами.
Вы пишете в HKEY_CLASSES_ROOT
.Не делай этого.MSDN говорит так же.Вы можете читать из него, но не писать в него.Вместо этого вам нужно указать либо HKEY_CURRENT_USER\Software\Classes
, либо HKEY_LOCAL_MACHINE\Software\Classes
, в зависимости от того, нужно ли зарегистрировать расширение оболочки для текущего пользователя или всех пользователей.
Вы игнорируете возвращаемое значение OpenKey()
иCreateKey()
чтобы убедиться, что ключи открыты / созданы успешно, прежде чем писать в них.