用Delphi编写ASP COM的奇怪问题!(100分)

  • 主题发起人 主题发起人 lha
  • 开始时间 开始时间
L

lha

Unregistered / Unconfirmed
GUEST, unregistred user!
我想写一个能在ASP中调用的COM ,该COM能将注册表中的
HKEY_LOCAL_MACHINE/Software/ASPCOM 下的两个字符串值读出
UserName
Password

其中,ASPCOM的键原先就已经建好, UserName 与 Password
两项的值也已填入。

部分代码如下:
....
procedure TmyADOConn.GetLoginInfo;
var Reg : TRegistry;
tmpStr : String;
begin
Reg := TRegistry.Create;
try
Reg.RootKey := HKEY_LOCAL_MACHINE;
if Reg.OpenKey('/Software/ASPCOM', False) then
begin
FUserName := Reg.ReadString('UserName');
FPassword := Reg.ReadString('Password');
tmpStr := Format('UserName : %s , Password : %s <BR>',[FUserName,FPassword]);
Response.Write(tmpStr);
end
else
Response.Write('Read Registe ERROR!');
Reg.CloseKey;
finally
Reg.Free;
end;
end;
....

不知为何, 这段代码执行的结果都是输出 'Read Registe ERROR!'
也就是说 OpenKey出错了

可是 同样的代码(将Response.Write改为ShowMessage)在普通的Application中执行
都能得到正确的 UserName与Password
也就是说 OpenKey正确。

这是怎么回事呀? 是COM与Application的不同之处?

还有, 请问用Delphi写ASP COM还要注意什么问题? (分数可另给)
 
我在CGI程序中读过注册表,在Win98中没问题,到了Win2K,就跟你一样了.
 
猜想一下,是否会是权限的问题,asp的权限并不是你的登陆权限,而是一个奇怪的IUSER_XXXX
这个用户应该没有修改注册表的权限。

不知是否对,我也不知道怎么改
 
to timerri:

我也是这样想的,于是我将COM 放入到 COM+/MTS中 (win2000)

把用户改为Administrator但是还不行呀!
 
我用 RegOpenKeyEx 试了一下 发现其返回码是 5 代表 ERROR_ACCESS_DENIED

拒绝访问,没有权限访问!?

于是用 RegOpenReadOnly 代替了 RegOpen , 这下子能将注册表中的数据读出

可是怎样才能将信息写入注册表呢? 如果是和权限有关 那该如何设置?

大家快帮帮忙呀,分数不够,可再加。
 
对,这种程序好像只能读写HKEY_CURRENT_USER段的内容,不能读写HKEY_LOCAL_MACHINE
 
to 猛禽:
能读HKEY_LOCAL_MACHINE, 可是不能写HKEY_LOCAL_MACHINE
唉 怎么办呀
 
没办法,这是NT的权限问题,要安全起见嘛,LOCALMACHINE里可都是重要数据呢。改到CURRENTUSER里吧
 
解决这个问题很简单:
打开IIS对应的Service,将其运行帐号改为:Administrator就可以了!
 
to andin:
谢谢,我先回去试一试, 如果能搞定马上给你加分.
 
多人接受答案了。
 
后退
顶部