您好,欢迎来到[编程问答]网站首页   源码下载   电子书籍   软件下载   专题
当前位置:首页 >> 编程问答 >> Delphi >> xp中,修改注册表的程序,在administrator用户下可以正常执行,user用户下,找不到这个主键

xp中,修改注册表的程序,在administrator用户下可以正常执行,user用户下,找不到这个主键

来源:网络整理     时间:2016/8/25 2:29:59     关键词:

关于网友提出的“ 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

相关图片

相关文章