2017-12-05 2 views
1

새 키를 쓰고 싶습니다. 즉 Mode에 값을 지정하려고합니다. 시스템은 32 비트이고 코드는 다음과 같습니다. 이 모드에 대한 데이터를 설정하지 못했습니다. 다음 매개 변수를 사용하여 오류가 발생합니다. 다른 매개 변수를 reg.Access로 설정했지만 성공하지는 못했습니다. 나는 항상 reg.OpenKey 메소드에서 KEY_WRITE와 마찬가지로 KEY_READ에 대한 액세스를 유지해야한다.레지스트리에서 하위 키로 데이터를 설정하는 중 오류가 발생했습니다.

reg := TRegistry.Create(KEY_READ); 
    reg.RootKey := HKEY_LOCAL_MACHINE; 

    if (not reg.KeyExists('\Software\MyApp\appname\')) then 
    begin 
     MessageDlg('Key not found! Created now.', mtInformation, mbOKCancel, 0); 
    end; 

    reg.Access:= KEY_READ; 
    openResult := reg.OpenKey('\Software\MyApp\appname\',True); 
     if not openResult = True then 
     begin 
      MessageDlg('Unable to create key! Exiting.', mtError, mbOKCancel, 0); 
      Exit(); 
     end; 


     if not reg.KeyExists('Mode') then 
     begin 
     reg.WriteString('Mode','trial'); 
     end; 

답변

4

KEY_READ 당신에게 읽기 권한을 부여합니다. 그러나 그것은 당신에게 충분하지 않습니다. TrueCanCreate 인수에 OpenKey으로 전달하므로 KEY_CREATE_SUB_KEY 액세스 플래그가 필요합니다. 그리고 나서 KEY_WRITE 액세스 플래그가 필요한 값을 쓰려고 시도합니다.

문제는 충분한 권한이없는 사용자로 프로세스가 실행되는 것일 수 있습니다. 프로그램이 충분한 권한으로 실행되는지 확인해야합니다. 보통 이것은 관리자로 실행하는 것을 의미합니다. 응용 프로그램 매니페스트를 사용하여 응용 프로그램에 가장 적합한 방법 인 동사 또는 runas 동사를 적용합니다.

관련 문제