使用下面的代码我尝试在注册表的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 2012-07-28 09:50:41
检查此问题 - [非管理员模式下的注册表访问](http://stackoverflow.com/questions/1681434/registry-access-in-non-admin-mode) – PresleyDias 2012-07-28 10:04:13
考虑在'Autostart'文件夹中创建一个快捷方式用户开始菜单。这不需要管理员权限,写入HKLM就行。另外,它给了他更多的控制权。 – Chris 2012-07-28 10:42:03