Programa lançador de programas???
Galera, é o seguinte, estou criando uma app muito grande com diversos módulos (compras,vendas,cadastros ....) e resolvi usar os packages (.dpk) para criar cada módulo e um programa principal que carrega estes packages e os executa de acordo com o usuário. Na fase de testes e desenvolvimento tudo funciona as mil maravihas. Mas na hora de implantar, sempre dá algum erro na hora de fechar o programa principal. E estou desconfiado que é na hora de descarregar os módulos da memória.
A minha pergunta é o seguinte:
Ao invés de usar packages, eu usasse pquenos executáveis q fossem responsáveis por cada módulo?
O programa lançador continuaria o mesmo, mas ao invés de carregar os pacjages, ele iria lançar os executáveis(módulos).
O q vcs acham? alguem já fez isto?
Obrigado
A minha pergunta é o seguinte:
Ao invés de usar packages, eu usasse pquenos executáveis q fossem responsáveis por cada módulo?
O programa lançador continuaria o mesmo, mas ao invés de carregar os pacjages, ele iria lançar os executáveis(módulos).
O q vcs acham? alguem já fez isto?
Obrigado
Aledeol
Curtidas 0
Respostas
Kiguti
03/02/2004
Eu nunca cheguei a fazer isto... mas vou dar a minha opinião.
Se você fizer deste modo, o seu app principal abrindo os outros executáveis, será mais simples você controlar, não terás muito problema para ficar liberando da memória o que for executado. Não lembro do procedimento, mas já vi isso, se quiser eu devo até ter um exemplo aqui, o seu app principal pode passar parâmetros na chamada dos modulos, assim você pode bolar um esquema que só com o app principal você consegue executar os módulos, caso contrário ele nega o acesso a determinado módulo. Se isso interessar me manda um email que eu dou uma pesquisada nisso e te passo... ok??? (rkiguti@yahoo.com)
Quanto a utilizar os *.dpk já não posso ajudar por não saber usar muito bem esse recurso...
Kiguti
Se você fizer deste modo, o seu app principal abrindo os outros executáveis, será mais simples você controlar, não terás muito problema para ficar liberando da memória o que for executado. Não lembro do procedimento, mas já vi isso, se quiser eu devo até ter um exemplo aqui, o seu app principal pode passar parâmetros na chamada dos modulos, assim você pode bolar um esquema que só com o app principal você consegue executar os módulos, caso contrário ele nega o acesso a determinado módulo. Se isso interessar me manda um email que eu dou uma pesquisada nisso e te passo... ok??? (rkiguti@yahoo.com)
Quanto a utilizar os *.dpk já não posso ajudar por não saber usar muito bem esse recurso...
Kiguti
GOSTEI 0
Phenomenom
03/02/2004
Usando pequenos executáveis eu aconselharia que colocasse uma rotina que permitisse que esse executável rodasse apenas com passagem de parâmetros, ou seja, se rodar direto o exe dos modulos o programa não funciona, só vai rodar se for chamado do programa principal, e este passará um parâmetro externo que validará o exe do modulo. A maneira mais correta de se fazer isso é compilando os outros modulos em dll´s e fazer chamadas extern do seu programa principal.
GOSTEI 0
Aledeol
03/02/2004
Valeu pela dica.
Mas como posso criar um exe q receber parâmetros?
Onde declaro os parâmetros?
Mas como posso criar um exe q receber parâmetros?
Onde declaro os parâmetros?
GOSTEI 0
Kiguti
03/02/2004
Inclua na seção uses: Windows
Antes da linha ´Application.Initialize;´(Project - View Source) de cada modulo que queira proteger para que somente a sua aplicação possa executar, coloque o código abaixo:
if ParamStr(1) <> ´MinhaSenha´ then begin
{ Para usar ShowMessage, coloque Dialogs no uses }
ShowMessage(´Acesso Negado!!´);
Halt; { Finaliza }
end;
agora na sua app principal (programa chamador dos modulos):
procedure TForm1.Button1Click(Sender: TObject);
var
Erro: Word;
begin
Erro := WinExec(´Modulo1.exe MinhaSenha´, SW_SHOW);
if Erro <= 31 then { Se ocorreu erro... }
ShowMessage(´Erro ao executar o programa.´);
end;
espero ter ajudado
Kiguti
Antes da linha ´Application.Initialize;´(Project - View Source) de cada modulo que queira proteger para que somente a sua aplicação possa executar, coloque o código abaixo:
if ParamStr(1) <> ´MinhaSenha´ then begin
{ Para usar ShowMessage, coloque Dialogs no uses }
ShowMessage(´Acesso Negado!!´);
Halt; { Finaliza }
end;
agora na sua app principal (programa chamador dos modulos):
procedure TForm1.Button1Click(Sender: TObject);
var
Erro: Word;
begin
Erro := WinExec(´Modulo1.exe MinhaSenha´, SW_SHOW);
if Erro <= 31 then { Se ocorreu erro... }
ShowMessage(´Erro ao executar o programa.´);
end;
espero ter ajudado
Kiguti
GOSTEI 0
Bolus
03/02/2004
Caro Colega,
Nunca utilizei Packages (*.dpk) como informaste, mas utilizava DLL´s, ou seja, criava cada modulo independente, mas acionado por um programa central, semelhante ao que deseja.....
Na solução de DLL´s sempre utilizo a carga dinamica ou seja utilizo o LoadLibrary, pois assim posso verificar a existencia da DLL´s e dar uma mensagem indicando que o módulo esta indisponivel para o cliente, muito mais elegante do que a famosa tela de Erro na carga da DLL informada pelo Windows.
Como informaste que já utilizaste como pequenos executaveis, fica mais simples transformar para DLL......
Quanto a pegar informações via linha de Comando ( parametros para Executaveis), o Delphi possui 2 funções para isso:
ParamCount - que contem o numero de Parametros passados e
ParamStr(x) - que retorna o Parametro X (x é o numero da ordem do parametro na linha de comando), não esqueça que o retorno é String.
Ex.:
Programa.exe 1 3 ´Meu programa´
ParamCount - Retornaria 3
ParamStr(1) - retornaria 1
ParamStr(3) - retornaria ´Meu Programa´, sem as aspa...
Lembre-se que para enviar um parametro que contenha espaços, deverá ser colocado entre aspas..
Em caso de dúvidas consulte o Help do Delphi....
Nunca utilizei Packages (*.dpk) como informaste, mas utilizava DLL´s, ou seja, criava cada modulo independente, mas acionado por um programa central, semelhante ao que deseja.....
Na solução de DLL´s sempre utilizo a carga dinamica ou seja utilizo o LoadLibrary, pois assim posso verificar a existencia da DLL´s e dar uma mensagem indicando que o módulo esta indisponivel para o cliente, muito mais elegante do que a famosa tela de Erro na carga da DLL informada pelo Windows.
Como informaste que já utilizaste como pequenos executaveis, fica mais simples transformar para DLL......
Quanto a pegar informações via linha de Comando ( parametros para Executaveis), o Delphi possui 2 funções para isso:
ParamCount - que contem o numero de Parametros passados e
ParamStr(x) - que retorna o Parametro X (x é o numero da ordem do parametro na linha de comando), não esqueça que o retorno é String.
Ex.:
Programa.exe 1 3 ´Meu programa´
ParamCount - Retornaria 3
ParamStr(1) - retornaria 1
ParamStr(3) - retornaria ´Meu Programa´, sem as aspa...
Lembre-se que para enviar um parametro que contenha espaços, deverá ser colocado entre aspas..
Em caso de dúvidas consulte o Help do Delphi....
GOSTEI 0
Aledeol
03/02/2004
Galera, muito obrigado.
Vcs elucidaram a minha dúvida. :D
Vcs elucidaram a minha dúvida. :D
GOSTEI 0