Executar uma executavel só se o programa autorizar

Delphi

03/05/2005

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


Babu

Babu

Curtidas 0

Respostas

Antseralves

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


GOSTEI 0
Martins

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

Marcelo Saviski

03/05/2005

Outra maneira seria usando

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
POSTAR