아래 코드를 사용하여 레지스트리의 HKEY_LOCAL_MACHINE 섹션에 값을 설정하려고 시도했지만 '.....에 대한 데이터를 설정하지 못했습니다.'라는 메시지가 나타납니다. HKEY_CURRENT_USER를 사용하면 문제 없습니다.레지스트리에 값을 저장하려고 할 때 오류가 발생했습니다.
여기에 무엇이 누락 될 수 있습니다.
은 (코드는 완전하지 않다, 그러나 나는 그것의 중요한 부분이라고 생각)
type
TTypWinBits = (Bit32, Bit64);
function WinBits: TTypWinBits;
type
TIsWow64Process = function(Handle:THandle; var IsWow64 : BOOL) : BOOL; stdcall;
var
hKernel32 : Integer;
IsWow64Process : TIsWow64Process;
IsWow64 : BOOL;
begin
Result := Bit32;
hKernel32 := LoadLibrary('kernel32.dll');
if (hKernel32 = 0) then RaiseLastOSError;
@IsWow64Process := GetProcAddress(hkernel32, 'IsWow64Process');
if Assigned(IsWow64Process) then
begin
IsWow64 := False;
if (IsWow64Process(GetCurrentProcess, IsWow64)) then
Result := Bit64
else
RaiseLastOSError;
end;
FreeLibrary(hKernel32);
end;
function TFastRegistry.CreateConnection: TRegistry;
begin
Result := TRegistry.Create;
try
case WinBits of
Bit32: Result := TRegistry.Create;
Bit64: Result := TRegistry.Create(KEY_WRITE OR KEY_WOW64_64KEY);
end;
except
on E: exception do
Result := nil;
end;
end;
procedure TFastRegistry.RunAdd(aDesc, aName: string);
var
Reg: TRegistry;
sRegKey: String;
begin
sRegKey := 'Software\Microsoft\Windows\CurrentVersion\Run';
Reg := CreateConnection;
with Reg do
begin
try
RootKey := HKEY_LOCAL_MACHINE;
if not KeyExists(sRegKey) then
OpenKey(sRegKey, True)
else
OpenKey(sRegKey, False);
WriteString(aDesc, aName);
finally
CloseKey;
Free;
end;
end;
end;
아마도 시스템 레지스트리 쓰기 권한 및/또는 앱 권한 권한 상승이 없습니다. – Marcodor
이 질문을 확인하십시오 - [비 관리자 모드에서 레지스트리 액세스] (http://stackoverflow.com/questions/1681434/registry-access-in-non-admin-mode) – PresleyDias
의 'Autostart'폴더에 바로 가기 만들기를 고려하십시오. 사용자가 메뉴를 시작합니다. HKLM에 기록하는 동안 관리자 권한이 필요하지 않습니다. 또한, 그에게 더 많은 통제력을줍니다. – Chris