Как в c ++ builder экспортировать реестр в * .reg файл? - PullRequest
1 голос
/ 08 июня 2011

Я использую reg-> SaveKey («Программное обеспечение», «D: \ 1.reg»). Но получается пустой файл, без данных.

void __fastcall TForm1::Button2Click(TObject *Sender)
{
      TRegistry *reg=new TRegistry(KEY_READ);
      reg->RootKey=HKEY_LOCAL_MACHINE;
      reg->OpenKey("Software",0);;
      reg->SaveKey("Software","D:\\1.reg");
      delete reg;

}

Ответы [ 2 ]

3 голосов
/ 08 июня 2011

SaveKey - это свободная обертка вокруг RegSaveKey(), документация которой гласит:

В вызывающем процессе должна быть включена привилегия SE_BACKUP_NAME. Для получения дополнительной информации см. Запуск со специальными привилегиями.

Пользовательские токены обычно не имеют включенной привилегии SE_BACKUP_NAME. Чтобы выполнить это требование, вам необходимо:

  1. Запуск от имени администратора.
  2. Добавьте привилегию SE_BACKUP_NAME в свой токен пользователя.

Другое требование, которое вы должны соблюдать, это то, что выходной файл не должен существовать, прежде чем вы вызовете SaveKey.

См. статью EDN для кода C ++, иллюстрирующего метод.

0 голосов
/ 09 июня 2011

Следующий вариант сработал!

void __fastcall TForm1::Button2Click(TObject *Sender)
{
TRegistry *reg=new TRegistry(KEY_READ);
HANDLE ProcessToken;

if (OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &ProcessToken))
{
    SetPrivilege(ProcessToken, SE_BACKUP_NAME, TRUE);
          TRegistry *reg=new TRegistry(KEY_READ);
      reg->RootKey=HKEY_LOCAL_MACHINE;
      reg->SaveKey("Software","D:\\1.reg");
      delete reg;
}



}
...