Descobrir arquivos utilizados pelo exe
Bom dia colegas,
existe algum aplicativo eu alguma solução para eu descobrir quais as .dlls e arquivos em geral mas principalmente dll que o meu .exe necessita para rodar?
obrigado.
existe algum aplicativo eu alguma solução para eu descobrir quais as .dlls e arquivos em geral mas principalmente dll que o meu .exe necessita para rodar?
obrigado.
Tappedroso
Curtidas 0
Melhor post
Carlosfim
30/04/2008
Mazzi,
Quanto às dlls, eu não sei como verificar. Mas, com relação aos pacotes, o próprio delphi (2007) fornece essa informação através do menu Project -> Information for <nome do projeto>.
Esta unit que criei, baseada em um exemplo do livro Dominando o Delphi 7, do Cantú, copia todos os pacotes necessários para o seu .exe rodar para uma pasta dentro da pasta do projeto, todas as vezes que seu .exe é executado.
Como dito anteriormente, basta adicionar esta unit no arquivo do projeto (.dpr) que, toda vez que vc executar seu programa, ela irá:
- Criar uma pasta chamada Runtime Packages dentro da pasta do seu projeto
- Copiar todos os pacotes que seu .exe precisa para funcionar para dentro desta pasta
- Criar um arquivo XML chamado DependencyList.xml, contendo o nome e a localização de cada pacote no seu PC.
Obs:
Lembre-se de remover a unit quando for compilar uma versão do seu programa que será implantada no cliente
Quanto às dlls, eu não sei como verificar. Mas, com relação aos pacotes, o próprio delphi (2007) fornece essa informação através do menu Project -> Information for <nome do projeto>.
Esta unit que criei, baseada em um exemplo do livro Dominando o Delphi 7, do Cantú, copia todos os pacotes necessários para o seu .exe rodar para uma pasta dentro da pasta do projeto, todas as vezes que seu .exe é executado.
unit UntExtractDependencies; interface implementation uses SysUtils, Windows, ActiveX, XMLDoc, XMLDom, XMLIntf, Classes, Forms, Variants, Dialogs; var DependencyDoc: TXMLDocument; ModuleNode, ContNode, ReqNode: IXMLNode; procedure GetInfoPackage(const Name: String; NameType: TNameType; Flags: Byte; Param: Pointer); begin case NameType of ntContainsUnit: begin ContNode := ContNode.AddChild(´Unit´); ContNode.Attributes[´name´] := Name; ContNode := ContNode.ParentNode; end; ntRequiresPackage: begin ReqNode := ReqNode.AddChild(´Package´); ReqNode.Attributes[´name´] := Name; ReqNode := ReqNode.ParentNode; end; end; end; function GetInfoModule(HInstance: Longint; Data: Pointer): Boolean; var Flags: Integer; ModulePath, ModuleName: string; begin //Extrai os dados do módulo SetLength (ModuleName, 200); GetModuleFileName (HInstance, PChar (ModuleName), Length (ModuleName)); ModulePath := PChar(ModuleName); ModuleName := ExtractFileName(ModulePath); //Cria o nó referente ao módulo atual e adiciona suas propriedades ModuleNode := ModuleNode.AddChild(´Module´); ModuleNode.Attributes[´name´] := ModuleName; ModuleNode.Attributes[´location´] := ModulePath; ModuleNode.Attributes[´description´] := GetPackageDescription(PChar(ModuleName)); if Flags and pfDesignOnly = pfDesignOnly then begin ModuleNode.Attributes[´type´] := ´DesignTime´; end; if Flags and pfRunOnly = pfRunOnly then begin ModuleNode.Attributes[´type´] := ´RumTime´; end; //Cria os nós Contains e Requires ContNode := ModuleNode.AddChild(´Contains´); ReqNode := ModuleNode.AddChild(´Requires´); //Adiciona informações do pacote GetPackageInfo(HInstance, nil, Flags, GetInfoPackage); //Retorna ao módulo principal para a adição de um novo filho ModuleNode := ModuleNode.ParentNode; Result := True; end; procedure PrepareXMLDoc; begin //Prepara o documento XML DependencyDoc := TXMLDocument.Create(Application); DependencyDoc.DOMVendor := GetDOMVendor(´MSXML´); DependencyDoc.Options := [doNodeAutoCreate,doAttrNull,doAutoPrefix,doNamespaceDecl]; DependencyDoc.XML.Clear; DependencyDoc.Active := True; DependencyDoc.CreateElement(´xml´, ´´); DependencyDoc.Version := ´1.0´; DependencyDoc.Encoding := ´UTF-8´; ModuleNode := DependencyDoc.AddChild(´ModulesList´); end; procedure SaveDependencyFile; begin DependencyDoc.SaveToFile(extractfilepath(Application.ExeName) + ´DependencyList.xml´); DependencyDoc.Destroy; end; procedure CopyFiles(const Path: String); var cont: Integer; begin if Not(DirectoryExists(Path)) then begin CreateDir(Path); end; for cont := 1 to ModuleNode.ChildNodes.Count - 1 do begin CopyFile(PChar(Variants.VarToStr(ModuleNode.ChildNodes[cont].Attributes[´location´])), PChar(Variants.VarToStr(Path + ´\´ + ModuleNode.ChildNodes[cont].Attributes[´name´])), False); end; end; initialization CoInitialize(nil); PrepareXMLDoc; EnumModules(GetInfoModule, nil); CopyFiles(ExtractFilePath(Application.ExeName) + ´Runtime Packages´); SaveDependencyFile; finalization CoUninitialize; end.
Como dito anteriormente, basta adicionar esta unit no arquivo do projeto (.dpr) que, toda vez que vc executar seu programa, ela irá:
- Criar uma pasta chamada Runtime Packages dentro da pasta do seu projeto
- Copiar todos os pacotes que seu .exe precisa para funcionar para dentro desta pasta
- Criar um arquivo XML chamado DependencyList.xml, contendo o nome e a localização de cada pacote no seu PC.
Obs:
Lembre-se de remover a unit quando for compilar uma versão do seu programa que será implantada no cliente
GOSTEI 1
Mais Respostas
Mazzi
29/04/2008
Ola, tudo bem?
Bom ... que eu saiba nao existe um software que lhe diga quais dll´s vc deve usar para seu .EXE rodar, normalmente isso é um pré-requisito do proprio programador saber, porém esse conhecimento é fundamentado na leitura dos proprios componentes e recursos que o seu software utiliza.
Ex:
Se usa componentes DBX, vai usar:
-midas.dll;
-dbexpint.dll;
(não só dll´s) mas tbm:
-dbxconnections.ini;
-dbxdrivers.ini;
Se vai usar outro tipo de recurso, como por exemplo banco de dados Firebird, :
-fbClient.dll;
Se vai usar relatorios QReport:
-qtinf70.dll;
--qtinf71.dll;
---qtinf90.dll;
etc...
Outra coisa, normalmente o Delphi mesmo ao executar uma aplicação, informa o(s) arquivo(s) necessário(s) qdo preciso.
Espero ter ajudado.
Abraços++
Bom ... que eu saiba nao existe um software que lhe diga quais dll´s vc deve usar para seu .EXE rodar, normalmente isso é um pré-requisito do proprio programador saber, porém esse conhecimento é fundamentado na leitura dos proprios componentes e recursos que o seu software utiliza.
Ex:
Se usa componentes DBX, vai usar:
-midas.dll;
-dbexpint.dll;
(não só dll´s) mas tbm:
-dbxconnections.ini;
-dbxdrivers.ini;
Se vai usar outro tipo de recurso, como por exemplo banco de dados Firebird, :
-fbClient.dll;
Se vai usar relatorios QReport:
-qtinf70.dll;
--qtinf71.dll;
---qtinf90.dll;
etc...
Outra coisa, normalmente o Delphi mesmo ao executar uma aplicação, informa o(s) arquivo(s) necessário(s) qdo preciso.
Espero ter ajudado.
Abraços++
GOSTEI 0
Tássio Gois
29/04/2008
Mazzi,
Quanto às dlls, eu não sei como verificar. Mas, com relação aos pacotes, o próprio delphi (2007) fornece essa informação através do menu Project -> Information for <nome do projeto>.
Esta unit que criei, baseada em um exemplo do livro Dominando o Delphi 7, do Cantú, copia todos os pacotes necessários para o seu .exe rodar para uma pasta dentro da pasta do projeto, todas as vezes que seu .exe é executado.
Como dito anteriormente, basta adicionar esta unit no arquivo do projeto (.dpr) que, toda vez que vc executar seu programa, ela irá:
- Criar uma pasta chamada Runtime Packages dentro da pasta do seu projeto
- Copiar todos os pacotes que seu .exe precisa para funcionar para dentro desta pasta
- Criar um arquivo XML chamado DependencyList.xml, contendo o nome e a localização de cada pacote no seu PC.
Obs:
Lembre-se de remover a unit quando for compilar uma versão do seu programa que será implantada no cliente
Quanto às dlls, eu não sei como verificar. Mas, com relação aos pacotes, o próprio delphi (2007) fornece essa informação através do menu Project -> Information for <nome do projeto>.
Esta unit que criei, baseada em um exemplo do livro Dominando o Delphi 7, do Cantú, copia todos os pacotes necessários para o seu .exe rodar para uma pasta dentro da pasta do projeto, todas as vezes que seu .exe é executado.
unit UntExtractDependencies; interface implementation uses SysUtils, Windows, ActiveX, XMLDoc, XMLDom, XMLIntf, Classes, Forms, Variants, Dialogs; var DependencyDoc: TXMLDocument; ModuleNode, ContNode, ReqNode: IXMLNode; procedure GetInfoPackage(const Name: String; NameType: TNameType; Flags: Byte; Param: Pointer); begin case NameType of ntContainsUnit: begin ContNode := ContNode.AddChild(´Unit´); ContNode.Attributes[´name´] := Name; ContNode := ContNode.ParentNode; end; ntRequiresPackage: begin ReqNode := ReqNode.AddChild(´Package´); ReqNode.Attributes[´name´] := Name; ReqNode := ReqNode.ParentNode; end; end; end; function GetInfoModule(HInstance: Longint; Data: Pointer): Boolean; var Flags: Integer; ModulePath, ModuleName: string; begin //Extrai os dados do módulo SetLength (ModuleName, 200); GetModuleFileName (HInstance, PChar (ModuleName), Length (ModuleName)); ModulePath := PChar(ModuleName); ModuleName := ExtractFileName(ModulePath); //Cria o nó referente ao módulo atual e adiciona suas propriedades ModuleNode := ModuleNode.AddChild(´Module´); ModuleNode.Attributes[´name´] := ModuleName; ModuleNode.Attributes[´location´] := ModulePath; ModuleNode.Attributes[´description´] := GetPackageDescription(PChar(ModuleName)); if Flags and pfDesignOnly = pfDesignOnly then begin ModuleNode.Attributes[´type´] := ´DesignTime´; end; if Flags and pfRunOnly = pfRunOnly then begin ModuleNode.Attributes[´type´] := ´RumTime´; end; //Cria os nós Contains e Requires ContNode := ModuleNode.AddChild(´Contains´); ReqNode := ModuleNode.AddChild(´Requires´); //Adiciona informações do pacote GetPackageInfo(HInstance, nil, Flags, GetInfoPackage); //Retorna ao módulo principal para a adição de um novo filho ModuleNode := ModuleNode.ParentNode; Result := True; end; procedure PrepareXMLDoc; begin //Prepara o documento XML DependencyDoc := TXMLDocument.Create(Application); DependencyDoc.DOMVendor := GetDOMVendor(´MSXML´); DependencyDoc.Options := [doNodeAutoCreate,doAttrNull,doAutoPrefix,doNamespaceDecl]; DependencyDoc.XML.Clear; DependencyDoc.Active := True; DependencyDoc.CreateElement(´xml´, ´´); DependencyDoc.Version := ´1.0´; DependencyDoc.Encoding := ´UTF-8´; ModuleNode := DependencyDoc.AddChild(´ModulesList´); end; procedure SaveDependencyFile; begin DependencyDoc.SaveToFile(extractfilepath(Application.ExeName) + ´DependencyList.xml´); DependencyDoc.Destroy; end; procedure CopyFiles(const Path: String); var cont: Integer; begin if Not(DirectoryExists(Path)) then begin CreateDir(Path); end; for cont := 1 to ModuleNode.ChildNodes.Count - 1 do begin CopyFile(PChar(Variants.VarToStr(ModuleNode.ChildNodes[cont].Attributes[´location´])), PChar(Variants.VarToStr(Path + ´\\´ + ModuleNode.ChildNodes[cont].Attributes[´name´])), False); end; end; initialization CoInitialize(nil); PrepareXMLDoc; EnumModules(GetInfoModule, nil); CopyFiles(ExtractFilePath(Application.ExeName) + ´Runtime Packages´); SaveDependencyFile; finalization CoUninitialize; end.
Como dito anteriormente, basta adicionar esta unit no arquivo do projeto (.dpr) que, toda vez que vc executar seu programa, ela irá:
- Criar uma pasta chamada Runtime Packages dentro da pasta do seu projeto
- Copiar todos os pacotes que seu .exe precisa para funcionar para dentro desta pasta
- Criar um arquivo XML chamado DependencyList.xml, contendo o nome e a localização de cada pacote no seu PC.
Obs:
Lembre-se de remover a unit quando for compilar uma versão do seu programa que será implantada no cliente
Só deu erro na hora de compilar
[dcc32 Error] UntExtractDependencies.pas(70): E2250 There is no overloaded version of 'EnumModules' that can be called with these arguments
GOSTEI 0
Hélio Devmedia
29/04/2008
Mazzi,
Quanto às dlls, eu não sei como verificar. Mas, com relação aos pacotes, o próprio delphi (2007) fornece essa informação através do menu Project -> Information for <nome do projeto>.
Esta unit que criei, baseada em um exemplo do livro Dominando o Delphi 7, do Cantú, copia todos os pacotes necessários para o seu .exe rodar para uma pasta dentro da pasta do projeto, todas as vezes que seu .exe é executado.
Como dito anteriormente, basta adicionar esta unit no arquivo do projeto (.dpr) que, toda vez que vc executar seu programa, ela irá:
- Criar uma pasta chamada Runtime Packages dentro da pasta do seu projeto
- Copiar todos os pacotes que seu .exe precisa para funcionar para dentro desta pasta
- Criar um arquivo XML chamado DependencyList.xml, contendo o nome e a localização de cada pacote no seu PC.
Obs:
Lembre-se de remover a unit quando for compilar uma versão do seu programa que será implantada no cliente
Quanto às dlls, eu não sei como verificar. Mas, com relação aos pacotes, o próprio delphi (2007) fornece essa informação através do menu Project -> Information for <nome do projeto>.
Esta unit que criei, baseada em um exemplo do livro Dominando o Delphi 7, do Cantú, copia todos os pacotes necessários para o seu .exe rodar para uma pasta dentro da pasta do projeto, todas as vezes que seu .exe é executado.
unit UntExtractDependencies; interface implementation uses SysUtils, Windows, ActiveX, XMLDoc, XMLDom, XMLIntf, Classes, Forms, Variants, Dialogs; var DependencyDoc: TXMLDocument; ModuleNode, ContNode, ReqNode: IXMLNode; procedure GetInfoPackage(const Name: String; NameType: TNameType; Flags: Byte; Param: Pointer); begin case NameType of ntContainsUnit: begin ContNode := ContNode.AddChild(´Unit´); ContNode.Attributes[´name´] := Name; ContNode := ContNode.ParentNode; end; ntRequiresPackage: begin ReqNode := ReqNode.AddChild(´Package´); ReqNode.Attributes[´name´] := Name; ReqNode := ReqNode.ParentNode; end; end; end; function GetInfoModule(HInstance: Longint; Data: Pointer): Boolean; var Flags: Integer; ModulePath, ModuleName: string; begin //Extrai os dados do módulo SetLength (ModuleName, 200); GetModuleFileName (HInstance, PChar (ModuleName), Length (ModuleName)); ModulePath := PChar(ModuleName); ModuleName := ExtractFileName(ModulePath); //Cria o nó referente ao módulo atual e adiciona suas propriedades ModuleNode := ModuleNode.AddChild(´Module´); ModuleNode.Attributes[´name´] := ModuleName; ModuleNode.Attributes[´location´] := ModulePath; ModuleNode.Attributes[´description´] := GetPackageDescription(PChar(ModuleName)); if Flags and pfDesignOnly = pfDesignOnly then begin ModuleNode.Attributes[´type´] := ´DesignTime´; end; if Flags and pfRunOnly = pfRunOnly then begin ModuleNode.Attributes[´type´] := ´RumTime´; end; //Cria os nós Contains e Requires ContNode := ModuleNode.AddChild(´Contains´); ReqNode := ModuleNode.AddChild(´Requires´); //Adiciona informações do pacote GetPackageInfo(HInstance, nil, Flags, GetInfoPackage); //Retorna ao módulo principal para a adição de um novo filho ModuleNode := ModuleNode.ParentNode; Result := True; end; procedure PrepareXMLDoc; begin //Prepara o documento XML DependencyDoc := TXMLDocument.Create(Application); DependencyDoc.DOMVendor := GetDOMVendor(´MSXML´); DependencyDoc.Options := [doNodeAutoCreate,doAttrNull,doAutoPrefix,doNamespaceDecl]; DependencyDoc.XML.Clear; DependencyDoc.Active := True; DependencyDoc.CreateElement(´xml´, ´´); DependencyDoc.Version := ´1.0´; DependencyDoc.Encoding := ´UTF-8´; ModuleNode := DependencyDoc.AddChild(´ModulesList´); end; procedure SaveDependencyFile; begin DependencyDoc.SaveToFile(extractfilepath(Application.ExeName) + ´DependencyList.xml´); DependencyDoc.Destroy; end; procedure CopyFiles(const Path: String); var cont: Integer; begin if Not(DirectoryExists(Path)) then begin CreateDir(Path); end; for cont := 1 to ModuleNode.ChildNodes.Count - 1 do begin CopyFile(PChar(Variants.VarToStr(ModuleNode.ChildNodes[cont].Attributes[´location´])), PChar(Variants.VarToStr(Path + ´\\\\´ + ModuleNode.ChildNodes[cont].Attributes[´name´])), False); end; end; initialization CoInitialize(nil); PrepareXMLDoc; EnumModules(GetInfoModule, nil); CopyFiles(ExtractFilePath(Application.ExeName) + ´Runtime Packages´); SaveDependencyFile; finalization CoUninitialize; end.
Como dito anteriormente, basta adicionar esta unit no arquivo do projeto (.dpr) que, toda vez que vc executar seu programa, ela irá:
- Criar uma pasta chamada Runtime Packages dentro da pasta do seu projeto
- Copiar todos os pacotes que seu .exe precisa para funcionar para dentro desta pasta
- Criar um arquivo XML chamado DependencyList.xml, contendo o nome e a localização de cada pacote no seu PC.
Obs:
Lembre-se de remover a unit quando for compilar uma versão do seu programa que será implantada no cliente
Só deu erro na hora de compilar
[dcc32 Error] UntExtractDependencies.pas(70): E2250 There is no overloaded version of 'EnumModules' that can be called with these arguments
Existe uma menu do delphi com uma opção que mostra as Dlls em uso:
View -> DebugWindow -> Modules
Espero ter ajudado...
GOSTEI 0