Fórum Como evitar que o executável seja aberto em rede? #378500

28/05/2010

0

Tenho um sistema que utiliza configurações do computador onde está instalado mas alguns usuários teimam em abrí-lo através de outro computador conectado em rede local e estas configurações são alteradas.

Minha dúvida:
Como posso fazer para bloquear o acesso ao executável do programa por outro computador, exceto o qual naquele onde está instalado?

Já tentei bloquear a instância mas ela só funciona no próprio computador, permitindo a criação de nova instância e abertura em outro computador da rede.
Aristeu Sales

Aristeu Sales

Responder

Posts

28/05/2010

Fábio Cruz

Pode ter uma forma melhor, mas...

Crie uma tabela com a informação que o sistema já está em uso, mas não esqueça de limpar depois que fechar
Responder

Gostei + 0

28/05/2010

Aristeu Sales

Obrigado pela sua dica Facc mas, neste caso, se houver algum problema e o programa não for fechado corretamente, ele não abrirá da próxima vez porque o identificador não foi alterado.   O que eu gostaria é de algo como o verificador de instância do aplicativo em que você pode usá-lo para que não seja aberta mais de uma instância.   Mas, em último caso, sua dica servirá como paliativo.   Valeu!
Responder

Gostei + 0

28/05/2010

Emerson Nascimento

você pode criar um arquivo ini - de preferência criptografado - e colocar ali quais computadores podem executar o sistema.

ao inicar o programa você pega o nome da máquina atual e verifica se ele esta contide no arquivo ini. se não estiver, você cancela a execução do programa.


algo assim:

no fonte do projeto:

program Project7;

uses
  Forms,
  Dialogs,
  SysUtils,
  Classes,
  Windows,
  Unit12 in 'Unit12.pas' ;

{$R *.res}

var
  lOk: boolean;
  sl: TStringList;
  arq: string;
  compname: array[0..MAX_COMPUTERNAME_LENGTH+1] of char;
  scompname: string;
  ntam: cardinal;
begin
  Application.Initialize;
  arq := 'sistema.ini';
  ntam := MAX_COMPUTERNAME_LENGTH+1;

  GetComputerName(compname, ntam);
  scompname := AnsiUpperCase(Trim(compname));
  lOK := False;

  if FileExists(arq) then
  begin
    sl := TStringList.Create;
    try
      sl.LoadFromFile(arq);
      lOK := Pos(scompname, sl.Values['Maquinas']) > 0;
      if not lOk then
        ShowMessage('O sistema não pode ser executado por este computador ('+scompname+')');
    finally
      FreeAndNil(sl);
    end;
  end
  else
    ShowMessage('Arquivo de controle [sistema.ini] não encontrado. O sistema não poderá ser executado.');

  if lOK then
  begin
    Application.CreateForm(TForm12, Form12);
    Application.Run;
  end
  else
    Application.Terminate;
end.


no arquivo sistema.ini (você pode colocar o conteúdo criptografado):

[EXECUTAR]
Maquinas=SERVER001;CLIENT002;


no exemplo apresentado, o sistema só poderá ser executado a partir da máquina SERVER001 e da CLIENT002.


Responder

Gostei + 0

17/06/2010

Carlos Mazzi

deu certo amigo?
Responder

Gostei + 0

17/06/2010

Adalberto Brasaca

Se o que você quer é que o seu sistema rode somente na máquina onde está instalado, você pode fazer uma comparação do caminho onde o executável está sendo rodado. Por exemplo, se ele estiver sendo rodado na máquina onde está instalado, o caminho será provavelmente "C:". Se for de outra máquina, através de um atalho apontando para o executável, começará com "\\". É só comparar os dois e abortar a execução...
Responder

Gostei + 0

18/06/2010

Aristeu Sales

Agradeço pelas sugestões. Todas as comparações funcionam mas requerem a gravação de algo que identifique a localização atual do sistema para comparações.    A sugestão do Adalberto é interessante (sem a necessitar gravar o local da aplicação) mas neste caso meu código deveria comparar somente com o drive C:, que não é o padrão de instalação para alguns dos usuários de meu sistema.    Ainda não consegui chegar ao que desejava: uma funcionalidade semelhante a verificação de instância (que não necessita de gravar informações para fazer a comparação).   Mesmo assim obrigado pelas dicas.    
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar