TRegistry no Windows Server 2008

11/12/2009

1

Ola pessoal,      O problema é o seguite:      Preciso do "ProductId" e do "InstallDate" que no Regedit estão em: " SOFTWARE\Microsoft\Windows NT\CurrentVersion "       Quando estou no windows XP, Vista, 7 ou Server 2003 não tem problema, mas quando estou no Server 2008 não da certo, o " ProductId " retorna vazio e o " Installdate " igual a 0 e para testar também usei o " ProductName " que retorna  " Windows Server (R) 2008 Standard ", isso mostra que esta conectado e que apenas o " ProductId " e o   " Installdate "não são acessados.       Agradeço a ajuda.  
Responder

Posts

17/12/2009

Teixeira

Ola,

Tenho uma aplicação feita em Delphi 7 que utiliza informações do sistema operacional (serial , data de instalação e Nome do produto). No Delphi 7 utilizo a classe TRegistry para buscar essas informações, porem quando coloquei o programa para rodar em um servidor com Windows Server ® 2008 Standard essas informações (productId, installdate e ProductName) estão retornando com os respectivos valores ( '' , 0 e 'Windows Server ® 2008 Standard') ou seja (vazio, zero e Windows Server ® 2008 Standard), no principio achei que poderia ser problema com o usuário logado ou com o tipo de acesso aos dados, mas não, executei como administrador, como visto acima o parametro productName esta correto e apenas o productId e installDate errados.

Lembrando que no windows XP, Vista, 7 , Server 2003 esta funcionando corretamente.

Alguem tem alguma idéia para resolver este problema?

Se alguem tiver o win server 2008 para testar, abaixo esta o código para buscar estas informações.


...
uses Registry

.
..
...

procedure BitBtn1Click(Sender: TObject);
var Registro : TRegistry;
Prod, Data, Nome : string;
begin

Registro := TRegistry.Create;

Registro.Access := KEY_READ;

Registro.RootKey := HKEY_LOCAL_MACHINE;

if not Registro.RegistryConnect('Colocar aqui o nome da máquina') then
begin
Registro.CloseKey;
ShowMessage('ERRO na conexão da máquina.');
Exit;
end;

if Registro.OpenKeyReadOnly('SOFTWARE\Microsoft\Windows NT\CurrentVersion') then
begin
Nome := Registro.ReadString('ProductName');
Prod := Registro.ReadString('ProductId');
Data := IntToStr(Registro.ReadInteger('InstallDate'));
ShowMessage('Nome : '+Nome +#13+
'Serial : '+Prod +#13+
'Data int : '+Data);
Registro.CloseKey;
end;


Agradeço a todos.
Responder