一个涉及写注册表的程序,在win98下运行没问题,到了win2000下却出了问题,是不是权限问题?

BCB 2001-12-03 10:14:03
在win2000下要写注册表是不是有权限问题?
反正我想用regedit.exe看注册表,却看不成!
求高手邦助!
...全文
81 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
copy_paste 2002-03-31
  • 打赏
  • 举报
回复
用API访问可以,不过2k禁止了注册表,如果用TRegister来访问HKEY_LOCAL_MACHINE的话(非Administrator),会出问题,API就没有问题,我是说读注册表,写就根本没有权限,所以....

后来试写,出错了,把全部程序写出来吧
主要是加入异常处理。

const
SOpenKey = 'SoftWare\MySetting;
SNode = 'NodeValue';
HRootKey = HKEY_Local_Machine;

procedure RaiseError(ErrorCode: Integer);
begin
if ErrorCode <> Error_Success then
raise Exception.Create(SysErrorMessage(ErrorCode));
end;

procedure TForm1.Button1Click(Sender: TObject);

function GetDataSize(AKey: HKey; AValueName: string): Integer;
var
DataType: Integer;
begin
DataType := 0;
if RegQueryValueEx(AKey, PChar(AValueName), nil, @DataType, nil,
@Result) <> ERROR_SUCCESS then Result := -1;
end;

var
Key: HKey;
ErrorCode: Integer;
BufSize, DataType: Integer;
Buffer: Pointer;
S: string;
begin
DataType := Reg_SZ;
ErrorCode := RegOpenKeyEx(HRootKey, PChar(SOpenKey), 0, Key_Read, Key);
RaiseError(ErrorCode);
try
BufSize := GetDataSize(Key, SNode);
ErrorCode := RegQueryValueEx(Key, PChar(SNode),
nil, @DataType, PByte(Buffer), @BufSize);
RaiseError(ErrorCode);
S := PChar(Buffer);
SetLength(S, BufSize);
MessageBox(Handle, PChar(S), '', MB_OK);
finally
RegCloseKey(Key);
end;
end;

procedure TForm1.Button2Click(Sender: TObject);
const
SValue= 'Hello';

function WriteString(AKey: HKey; Name: string; Buffer: Pointer; Len: Integer): Integer;
var
DataType: Integer;
begin
DataType := Reg_SZ;
Result := RegSetValueEx(AKey, PChar(Name), 0, DataType, Buffer, Len);
end;

var
ErrorCode: Integer;
Key: HKey;
begin
ErrorCode := RegOpenKeyEx(HRootKey, PChar(SOpenKey), 0, Key_Write, Key);
RaiseError(ErrorCode);
try
ErrorCode := WriteString(Key, SNode, PChar(SValue), Length(SValue) + 1);
RaiseError(ErrorCode);
finally
RegCloseKey(Key);
end;
end;
yhec 2002-02-12
  • 打赏
  • 举报
回复
win2000:

Windows Registry Editor Version 5.00
[Hkey_current_user\Software\microsoft\windows\currentversion\Policies\system]
"DisableRegistryTools"=dword:00000000

win98:
REGEDIT4
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\System]
"DisableRegistryTools"=dword:00000000
BCB 2001-12-03
  • 打赏
  • 举报
回复
运行 Regedit.exe 出现"注册表编辑已被管理员禁止 ",怎样才可以解锁?!
Linux2001 2001-12-03
  • 打赏
  • 举报
回复
哦,很简单,只要自己建立一个注册表文件解锁就OK了
Linux2001 2001-12-03
  • 打赏
  • 举报
回复
写一下你用regedit看注册表时,为什么看不成有没有什么提示,是否是注册表被锁或是regedit.exe被删除
BCB 2001-12-03
  • 打赏
  • 举报
回复
我在服务器版下试了,为什么用regedit.exe不能看注册表?出现
"注册表编辑已被管理员禁止 ",怎样才可以查看?!
BCB 2001-12-03
  • 打赏
  • 举报
回复
我在服务器版下试了,为什么用regedit.exe不能看注册表?出现
"注册表编辑已被管理员禁止 ",怎样才可以查看?!
x_qiang 2001-12-03
  • 打赏
  • 举报
回复
可以看啊,没问题呀,我刚刚还做了注册表的程序,一点问题都没有,98和2000下都可以,我做的是个自启动的

5,388

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧