Commit e63d51ce3e30a56842e31af45f0c1198d9300d99
1 parent
bd50634a
Exists in
master
Adição de coleta de software através do Registro do Windows
git-svn-id: http://svn.softwarepublico.gov.br/svn/cacic/cacic/trunk/agente-windows@1439 fecfc0c7-e812-0410-ae72-849f08638ee7
Showing
1 changed file
with
84 additions
and
0 deletions
Show diff stats
gercols/gercols.dpr
... | ... | @@ -599,6 +599,86 @@ begin |
599 | 599 | Result := FormatFloat('##0.00', (iResult / 100.0)); |
600 | 600 | end; |
601 | 601 | |
602 | +// Funcao que le os valores de software instalados no Registro do Windows | |
603 | +Function DisplayKeys(const Key: string; const Depth: Integer): String; | |
604 | +var | |
605 | + i: Integer; | |
606 | + SubKeys: TStringList; | |
607 | + Registry: TRegistry; | |
608 | + SubRegistry: TRegistry; | |
609 | + saida: String; | |
610 | +begin | |
611 | + Registry := TRegistry.Create; | |
612 | + SubRegistry := TRegistry.Create; | |
613 | + Registry.RootKey := HKEY_LOCAL_MACHINE; | |
614 | + if Registry.OpenKeyReadOnly(Key) then begin | |
615 | + Try | |
616 | + SubKeys := TStringList.Create; | |
617 | + Try | |
618 | + Registry.GetKeyNames(SubKeys); | |
619 | + // Abre a tag com o nome da chave | |
620 | + saida := '[SoftwareList]'; | |
621 | + | |
622 | + // Adiciona o pai | |
623 | + SubRegistry.RootKey := HKEY_LOCAL_MACHINE; | |
624 | + | |
625 | + for i := 0 to SubKeys.Count-1 do begin | |
626 | + //Writeln(StringOfChar(' ', Depth*2) + SubKeys[i]); | |
627 | + //DisplayKeys(Key + '\' + SubKeys[i], Depth+1); | |
628 | + // Essa linha coloca o valor da tag do registro | |
629 | + saida := saida + '[Software][IDSoftware]' + SubKeys[i] + '[/IDSoftware]'; | |
630 | + | |
631 | + // Abre a tag do registro | |
632 | + //Names := TStringList.Create; | |
633 | + SubRegistry.OpenKeyReadOnly(Key + '\' + SubKeys[i]); | |
634 | + | |
635 | + // Agora coloca o valor do registro dentro da tag | |
636 | + saida := saida + '[DisplayName]' + SubRegistry.ReadString('DisplayName') + '[/DisplayName]'; | |
637 | + saida := saida + '[DisplayVersion]' + SubRegistry.ReadString('DisplayVersion') + '[/DisplayVersion]'; | |
638 | + saida := saida + '[URLInfoAbout]' + SubRegistry.ReadString('URLInfoAbout') + '[/URLInfoAbout]'; | |
639 | + saida := saida + '[Publisher]' + SubRegistry.ReadString('Publisher') + '[/Publisher]'; | |
640 | + | |
641 | + // Fecho o registro e a tag | |
642 | + SubRegistry.CloseKey; | |
643 | + //SubRegistry.Free; | |
644 | + | |
645 | + // Fecha a tag do registro | |
646 | + saida := saida + '[/Software]'; | |
647 | + | |
648 | + // Chamada recursiva para tags que possuem valores internos | |
649 | + DisplayKeys(Key + '\' + SubKeys[i], Depth+1); | |
650 | + end; | |
651 | + | |
652 | + // Fecha a tag do software | |
653 | + saida := saida + '[/SoftwareList]'; | |
654 | + Finally | |
655 | + SubKeys.Free; | |
656 | + End; | |
657 | + Finally | |
658 | + Registry.CloseKey; | |
659 | + Registry.Free; | |
660 | + End; | |
661 | + Result := saida; | |
662 | + end; | |
663 | +end; | |
664 | + | |
665 | +// Procedimento que chama a lista de softwares do Sistema Operacional | |
666 | +Function SoftwareList: String; | |
667 | +var | |
668 | + strChave: String; | |
669 | + outString: String; | |
670 | +begin | |
671 | + // Esse registro é onde vamos buscar a chave do SO | |
672 | + strChave := '\Software\Microsoft\Windows\CurrentVersion\Uninstall'; | |
673 | + | |
674 | + // Passo aqui o registro e a profundidade dos campos que quero ver | |
675 | + outString := DisplayKeys(strChave, 3); | |
676 | + | |
677 | + // Retorno uma string com todas as tags coletadas do registro | |
678 | + Result := outString; | |
679 | +end; | |
680 | + | |
681 | + | |
602 | 682 | procedure executeGerCols; |
603 | 683 | var boolFound : boolean; |
604 | 684 | var strActionDefinition, |
... | ... | @@ -624,6 +704,7 @@ var strActionDefinition, |
624 | 704 | strRetorno, |
625 | 705 | strTeServidor, |
626 | 706 | strTripa, |
707 | + tstrColetaSoftware, | |
627 | 708 | strValorChavePerfis : String; |
628 | 709 | |
629 | 710 | intAux4, |
... | ... | @@ -1343,6 +1424,9 @@ Begin |
1343 | 1424 | Inc(intTotalExecutedCollects); |
1344 | 1425 | strClassesAndProperties := objCacic.getValueFromTags('ClassesAndProperties',strActionDefinition); |
1345 | 1426 | |
1427 | + objCacic.writeDebugLog('executeGerCols: Executando coleta de Software -> '); | |
1428 | + tstrColetaSoftware := SoftwareList; | |
1429 | + | |
1346 | 1430 | objCacic.writeDebugLog('executeGerCols: strClassesAndProperties -> "' + strClassesAndProperties + '"'); |
1347 | 1431 | tstringsClasses := objCacic.explode(objCacic.getValueFromTags('Classes',strClassesAndProperties),','); |
1348 | 1432 | ... | ... |