Programa lançador de programas???

Delphi

03/02/2004

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


Aledeol

Aledeol

Curtidas 0

Respostas

Kiguti

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


GOSTEI 0
Phenomenom

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

Aledeol

03/02/2004

Valeu pela dica.

Mas como posso criar um exe q receber parâmetros?

Onde declaro os parâmetros?


GOSTEI 0
Kiguti

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


GOSTEI 0
Bolus

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....


GOSTEI 0
Aledeol

Aledeol

03/02/2004

Galera, muito obrigado.

Vcs elucidaram a minha dúvida. :D


GOSTEI 0
POSTAR