Executar uma executavel só se o programa autorizar
Caros amigos olha eu denovo
Colegas como faço para bloquer uma executavel para ela não abrir tipo assim tenho meu programa ai eu dou um winexec... pra abrir o outro executavel mas eu quero que essa executavel só abra se o meu programa estiver aberto caso o usuario tente executar ela fora do sistema ela bloquei fala aplicação só pode ser aberta pelo sistema teste
caso o usuario abriu meu programa e foi no windows explorer e abriu fora e tenta executar o programa ele monstra a mesma mensagem... ele só devera abrir se o meu sistema autorizar....caso o usuario execute o aplicativo dentro do meu programa 2 vezes ele tem que falar esse sistema... ja esta em execução o programa x ja esta aberto.
bom parece complica mas não é facil se alguem poder me ajudar eu agradeço....
Colegas como faço para bloquer uma executavel para ela não abrir tipo assim tenho meu programa ai eu dou um winexec... pra abrir o outro executavel mas eu quero que essa executavel só abra se o meu programa estiver aberto caso o usuario tente executar ela fora do sistema ela bloquei fala aplicação só pode ser aberta pelo sistema teste
caso o usuario abriu meu programa e foi no windows explorer e abriu fora e tenta executar o programa ele monstra a mesma mensagem... ele só devera abrir se o meu sistema autorizar....caso o usuario execute o aplicativo dentro do meu programa 2 vezes ele tem que falar esse sistema... ja esta em execução o programa x ja esta aberto.
bom parece complica mas não é facil se alguem poder me ajudar eu agradeço....
Babu
Curtidas 0
Respostas
Antseralves
03/05/2005
Uma possível saída para isso é fazer com que o programa que vai
chamar sua aplicação passe um parâmetro qualquer que será
testado na mesma. Se o parâmetro for incorreto ou não existir
então dá uma mensagem de erro e cai fora. Exemplo:
No evento [b:42823b47e1]OnCreate[/b:42823b47e1] do formulário principal da aplicação que vai
ser executada:
procedure TForm1.FormCreate(Sender: TObject);
begin
if (ParamCount = 0) or (ParamStr(1) <> ´IDPROG´) then
begin
ShowMessage(´QUALQUER MENSAGEM EXPLICATIVA...´);
Application.Terminate;
end;
end;
No programa que vai chamar a aplicação:
WinExec(´C:\Aplicacao.exe IDPROG´,0);
Boa Sorte !
AntSer
=====
chamar sua aplicação passe um parâmetro qualquer que será
testado na mesma. Se o parâmetro for incorreto ou não existir
então dá uma mensagem de erro e cai fora. Exemplo:
No evento [b:42823b47e1]OnCreate[/b:42823b47e1] do formulário principal da aplicação que vai
ser executada:
procedure TForm1.FormCreate(Sender: TObject);
begin
if (ParamCount = 0) or (ParamStr(1) <> ´IDPROG´) then
begin
ShowMessage(´QUALQUER MENSAGEM EXPLICATIVA...´);
Application.Terminate;
end;
end;
No programa que vai chamar a aplicação:
WinExec(´C:\Aplicacao.exe IDPROG´,0);
Boa Sorte !
AntSer
=====
GOSTEI 0
Martins
03/05/2005
espero q essa dica possa lhe ser util, pois já ajudou alguns outros programadores, e ressalto aqui q a dica não é de minha autoria, peguei ela faz algum tempo na rede, atravez de e-zaine, por isso o crédito deve ser dado a quem é de direito, pena q não me foi enviado o nome de autor.
Inclua na seção uses: Windows
Problema:
Gostaria que um determinado programa (Prog1.EXE) fosse executado apenas através de outro programa (Prog2.EXE).
Solução:
Antes da linha ´Application.Initialize;´ de Prog1.dpr (programa a ser chamado), coloque o código abaixo:
{ No Form1 de Prog2 (programa chamador) coloque um botão e escreva o OnClick deste botão como abaixo:}
Observações
Aqui o parâmetro passado foi ´MinhaSenha´. Você deverá trocar ´MinhaSenha´ por algo que apenas você saiba (uma senha). Caso uma pessoa conheça esta senha, será possível chamar este programa passando-a como parâmetro. Neste caso sua ´trava´ estará violada.
Martins
Inclua na seção uses: Windows
Problema:
Gostaria que um determinado programa (Prog1.EXE) fosse executado apenas através de outro programa (Prog2.EXE).
Solução:
Antes da linha ´Application.Initialize;´ de Prog1.dpr (programa a ser chamado), coloque o código abaixo:
if ParamStr(1) <> ´MinhaSenha´ then begin
{ Para usar ShowMessage, coloque Dialogs no uses }
ShowMessage(´Execute este programa através de Prog2.EXE´);
Halt; { Finaliza }
end;
{ No Form1 de Prog2 (programa chamador) coloque um botão e escreva o OnClick deste botão como abaixo:}
procedure TForm1.Button1Click(Sender: TObject);
var
Erro: Word;
begin
Erro := WinExec(´Pro2.exe MinhaSenha´, SW_SHOW);
if Erro <= 31 then { Se ocorreu erro... }
ShowMessage(´Erro ao executar o programa.´);
end;
Observações
Aqui o parâmetro passado foi ´MinhaSenha´. Você deverá trocar ´MinhaSenha´ por algo que apenas você saiba (uma senha). Caso uma pessoa conheça esta senha, será possível chamar este programa passando-a como parâmetro. Neste caso sua ´trava´ estará violada.
Martins
GOSTEI 0
Marcelo Saviski
03/05/2005
Outra maneira seria usando
no .dpr do programa a ser chamado
e para chamar o programa e garantir que ele só vai ser executado a partir daqui (esse código pode ficar na função que chama o outro programa)
no .dpr do programa a ser chamado
program ProjetoX; (...) const MutexName = ´Nome que vai ser compartilhado pelas duas aplicações´; var Mutex : THandle; begin Mutex := CreateMutex(nil, True, PChar(MutexName)); if (Mutex = 0) and (GetLastError = ERROR_ALREADY_EXISTS) then //a aplicação chamadora está aberta else // a aplicação chamadora não está aberta (...) end;
e para chamar o programa e garantir que ele só vai ser executado a partir daqui (esse código pode ficar na função que chama o outro programa)
const MutexName = ´Nome que vai ser compartilhado pelas duas aplicações´; //O nome precisa ser igual ao registrado no outro programa var Mutex : THandle; begin Mutex := CreateMutex(nil, True, PChar(MutexName)); //Aqui chama a outra aplicação CloseHandle(Mutex); end;
GOSTEI 0