关于网友提出的“ xp中,修改注册表的程序,在administrator用户下可以正常执行,user用户下,找不到这个主键”问题疑问,本网通过在网上对“ xp中,修改注册表的程序,在administrator用户下可以正常执行,user用户下,找不到这个主键”有关的相关答案进行了整理,供用户进行参考,详细问题解答如下:
问题: xp中,修改注册表的程序,在administrator用户下可以正常执行,user用户下,找不到这个主键
描述: //得到office2007安装目录
ARegistry := TRegistry.Create;
ARegistry.RootKey:=HKEY_LOCAL_MACHINE;
if ARegistry.KeyExists('SOFTWARE\Microsoft\Office\12.0\Common\InstallRoot') then
begin
if ARegistry.OpenKey('SOFTWARE\Microsoft\Office\12.0\Common\InstallRoot',false) then
begin
ARegistry.OpenKey('SOFTWARE\Microsoft\Office\12.0\Common\InstallRoot',false) ;
officepath:=ARegistry.ReadString('Path');
//showmessage(officepath) ;
end;
ARegistry.CloseKey;
else
begin
showmessage('office2007没有安装');
Application.Terminate;
end;
ARegistry.Destroy;
请教如何才能得到权限?
解决方案1: 没有权限的windows用户是不能修改注册表信息的
解决方案2: 上面的不就是调整用户权限让它具有管理员权限吗?难道你想手动配置?
解决方案3: 楼上的不失为一个好办法
解决方案4: 鼠标右键的“运行方式”用administrator权限
在程序中判断运行权限
const
SECURITY_BUILTIN_DOMAIN_RID:Cardinal = $00000020;
DOMAIN_ALIAS_RID_ADMINS:Cardinal = $00000220;
var
SECURITY_NT_AUTHORITY:SID_IDENTIFIER_AUTHORITY;
function IsAdmin: Boolean;
var
hAccessToken: THandle;
ptgGroups: PTokenGroups;
dwInfoBufferSize: DWORD;
psidAdministrators: PSID;
x: Integer;
bSuccess: BOOL;
begin
Result := False;
bSuccess := OpenThreadToken(GetCurrentThread, TOKEN_QUERY, True, hAccessToken);
if not bSuccess then begin
if GetLastError = ERROR_NO_TOKEN then
bSuccess := OpenProcessToken(GetCurrentProcess, TOKEN_QUERY, hAccessToken);
end;
if bSuccess then begin
GetMem(ptgGroups, 1024);
bSuccess := GetTokenInformation(hAccessToken, TokenGroups, ptgGroups, 1024, dwInfoBufferSize);
CloseHandle(hAccessToken);
if bSuccess then begin
SECURITY_NT_AUTHORITY.Value[5] := 5;
AllocateAndInitializeSid(SECURITY_NT_AUTHORITY, 2, SECURITY_BUILTIN_DOMAIN_RID, DOMAIN_ALIAS_RID_ADMINS, 0, 0, 0, 0, 0, 0, psidAdministrators);
{$R-}
for x := 0 to ptgGroups.GroupCount - 1 do
if EqualSid(psidAdministrators, ptgGroups.Groups[x].Sid) then begin
Result := True;
Break;
end;
{$R+}
FreeSid(psidAdministrators);
end;
FreeMem(ptgGroups);
end;
end;
//////////////////////////////////////////////////
if not IsAdmin then begin
MessageBox(Self.Handle, Pchar('本程序需要管理员权限才能正常运行!'), nil, 0);
Close;
end;
以上介绍了“ xp中,修改注册表的程序,在administrator用户下可以正常执行,user用户下,找不到这个主键”的问题解答,希望对有需要的网友有所帮助。
本文网址链接:http://www.codes51.com/itwd/3582123.html