【发布时间】:2016-06-17 22:49:41
【问题描述】:
我正在尝试编写一个实用程序来自动化设置 PC 以使用 FTDI 串行>USB 转换器测试设备的过程。这需要找到已安装的设备信息并写入上述配置单元。我已经实现了特权提升并签署了程序,但它不允许我打开密钥。我可以打开父级,但不能打开“Enum”键或子级。
procedure TForm4.Button1Click(Sender: TObject);
var
aReg: TRegistry;
sl: TStringList;
begin
aReg := TRegistry.Create;
try
aReg.RootKey := HKEY_LOCAL_MACHINE;
if aReg.OpenKey('\SYSTEM\CurrentControlSet\Enum', false) then // \Enum\USB\VID_0403&PID_6001', false) then
begin
sl := TStringList.Create;
try
aReg.GetKeyNames(sl);
Memo1.Lines.Assign(sl);
Memo1.Lines.Add(IntToStr(sl.Count) + ' keys found.');
finally
sl.Free;
end;
end else
Memo1.Lines.Add('Could not open key');
finally
aReg.Free;
end;
end;
【问题讨论】:
-
默认情况下只有“system”拥有完全控制权限。 “管理员”并非如此。您可以使用 regedit 程序查看密钥的权限。您可以阅读原因here。您可以使用'OpenKeyReadOnly'来读取信息,但您最好使用链接中提到的api。
-
你应该测试错误并提供它们,最好的猜测,使用:TRegistry.Create(KEY_READ);
-
@FredS:最好使用
OpenKeyReadOnly()而不是OpenKey()。 -
以只读模式打开密钥不满足“和写入”要求。