//得到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.   

    鼠标右键的“运行方式”用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;
      

  2.   

    谢谢楼上的,
    不过不合我的要求
    我的程序要求:不管用户权限,能够得到相应的值
    后来如此解决,调用regedit,导出相应的值再差别
    再生成相应的reg文件,导入
      

  3.   

    没有权限的windows用户是不能修改注册表信息的
      

  4.   

    判断office有没有安装可以通过activex来识别,注册表权限定义的很死,别想了
    user权限HKEY_CURRENT_USER下面的项能正常读写