Ir para conteúdo
Fórum Script Brasil
  • 0

Executável abre e fecha


Gabriel Cabral

Pergunta

Bom dia, pessoal...

Tive um sério problema ontem..

Fui instalar o programa no computador do cliente, mas quando abro o executável, ele abre, fica menos de 1 segundo aberto e já fecha...

O pior é que em outros computadores aqui do esrcitório ele abriu normal....no computador de casa tambem...

é só no computador do cliente ¬¬

alguém já passou por isso??

Tem alguma coisa a dizer que possa me ajudar?!

Para instalar o programa no pc do cliente, eu apenas instalei o BDE na máquina e copiei o executável pra lá,

e na abertura do form principal, tem isto...

////////////////////////////////////////////////////////////////////////////////
//////////    VERIFICA SE O BORLAND DATABASE ENGINE ESTA INSTALADO   ///////////
//////////          SE NÃO ESTIVER, INSTALA E REGISTRA   /// (uses Registry) ///
////////////////////////////////////////////////////////////////////////////////
procedure Verifica_BDE;
const
  Key_Root = HKEY_LOCAL_MACHINE;
  Key_Data : Array[00..05, 01..03] Of String = (('Software\Borland\Database Engine', 'BDE_EXTERNAL', '0'),
    ('Software\Borland\Database Engine', 'DLLPATH' , '0'),
    ('Software\Borland\Database Engine', 'CONFIGFILE01', '1'),
    ('Software\Borland\BLW32' , 'BLAPIPATH' , '0'),
    ('Software\Borland\BLW32' , 'LOCALE_LIB1' , '5'),
    ('Software\Borland\BLW32' , 'LOCALE_LIB2' , '6'));
  BDE_Files : Array[01..10] Of String = ('idapi32.cfg', 'idapi32.dll', 'idr20009.dll', 'blw32.dll', 'usa.btl', 'europe.btl', 'idpdx32.dll', 'idasci32.dll', 'iddbas32.dll', 'idodbc32.dll');
var
  Status : Boolean;
  Index : Integer;
  Ind_Files : Integer;
  BDE_Dir : String;
  Registro : TRegIniFile;
begin
Try
  Registro := TRegIniFile.Create();
  Registro.RootKey := Key_Root;
  If (Not Registro.KeyExists(Key_Data[0,1])) Or (( Registro.KeyExists(Key_Data[0,1])) And (Registro.ReadString(Key_Data[0,1], Key_Data[0,2], 'FALSE') = 'TRUE')) Then
    Begin
      For Index := 1 To 4 Do
        Begin
          Case Index Of
            1 : BDE_Dir := ExtractFileDrive(ParamStr(0)) + '\BDE\';
            2 : BDE_Dir := ExtractFileDir(ParamStr(0)) + '\BDE\';
            3 : BDE_Dir := ExtractFilePath(ParamStr(0));
            4 : BDE_Dir := 'C:\Arquivos de Programas\Borland\Common Files\BDE\';
        End;
      Status := DirectoryExists(BDE_Dir);
      If Status Then
        For Ind_Files := Low(BDE_Files) To High(BDE_Files) Do
          Status := Status And FileExists(BDE_Dir + BDE_Files[Ind_Files]);
      If Status Then
        Break;
    End;
  For Index := Succ(Low(Key_Data)) To High(Key_Data) Do
    Begin
      If Key_Data[Index,3] = '0' Then
        Registro.WriteString(Key_Data[Index,1], Key_Data[Index,2], BDE_Dir)
      Else
        Registro.WriteString(Key_Data[Index,1], Key_Data[Index,2], BDE_Dir + BDE_Files[StrToInt(Key_Data[Index,3])]);
    End;
  Registro.WriteString(Key_Data[0,1], Key_Data[0,2], 'TRUE');
End;
Finally
  Registro.Free;
End;
end;

////////////////////////////////////////////////////////////////////////////////
/////////////   CRIA UM ALIAS PARA UM BANCO DE DADOS NO BDE   //////////////////
////////////////////////////////////////////////////////////////////////////////
procedure Cria_Alias(Parametros : Array Of Variant);
var
  List_Aux : TStringList;
begin
  If (Parametros[0] <> '') And (Parametros[1] <> '') Then
    Begin
      {Configura o parâmetro Local Share}
{      SetConfigParameter('\SYSTEM\INIT\;LOCAL SHARE' , 'FALSE');
      {Configura o parâmetro Net Dir}
{      SetConfigParameter('\DRIVERS\PARADOX\INIT\;NET DIR', Parametros[1]);
      {Cria ou altera o Path do Alias}
      List_Aux := TStringList.Create;
      List_Aux.Clear;
      List_Aux.Add('PATH=' + Parametros[1]);
      If Not Session.IsAlias(Parametros[0]) Then
        Session.AddAlias(Parametros[0], 'PARADOX', List_Aux)
      Else
        Session.ModifyAlias(Parametros[0], List_Aux);
      Session.SaveConfigFile;
      List_Aux.Free;
    End;
end;

procedure TfrmSupermPrincipal.mnuCadProClick(Sender: TObject);
begin
frmCadPro.Show;
end;

procedure TfrmSupermPrincipal.mnuCadFornClick(Sender: TObject);
begin
frmCadForn.Show;
end;

procedure TfrmSupermPrincipal.mnuCadSecaoClick(Sender: TObject);
begin
frmCadSecao.Show;
end;

procedure TfrmSupermPrincipal.mnuCadCliClick(Sender: TObject);
begin
  frmCadCli.Show;
end;

procedure TfrmSupermPrincipal.mnuCadOpeCxClick(Sender: TObject);
begin
  frmCadOpeCx.Show;
end;

procedure TfrmSupermPrincipal.ControledeCaixa1Click(Sender: TObject);
begin
  frmControleCaixa.Show;
end;

procedure TfrmSupermPrincipal.FormCreate(Sender: TObject);
var
  cur_dir:string;
begin
cur_dir:=ExtractFileDir(ParamStr(0))+'\';
Verifica_BDE;
Cria_Alias(['superm',cur_dir]);
end;

end.

Se alguém conseguir me ajudar...

pois só falta isso para o programa funcionar no cliente, e como ele já funcionou em outros computadores daqui, eu não sei o que está havendo :(

Muito obrigado

Link para o comentário
Compartilhar em outros sites

4 respostass a esta questão

Posts Recomendados

  • 0

o problema pode estar aqui

4 : BDE_Dir := 'C:\Arquivos de Programas\Borland\Common Files\BDE\';

veja como pode estar em outras maquinas

C:\Arquivos de programas\Arquivos comuns\Borland Shared\BDE

Voce tem que verificar se o caminho é o mesmo definido em seu programa

abraço

Link para o comentário
Compartilhar em outros sites

  • 0
mas se não for, você tem alguma outra sugestão do que possa ser??

costumo usar em meus programas uma rotina que procura por um arquivo dentro do micro, caso não seja achado o programa abre e fecha simplesmente sem apresentar erro, mas creio não ser este o seu caso.

muito provavelmente é o caminho, que dependendo da versão instalada do windows pode mudar

abraço

Link para o comentário
Compartilhar em outros sites

  • 0
É que achei muito estranho...

nem erro deu nem nada...só fechou mesmo

Gabriel Cabral, considerando que você chama o procedimento Verifica_BDE no OnCreate do form principal e lá você não deixa que a exceção seja mostrada, esta pode ser a causa.

Se quiser tirar a dúvida, troque esta parte da procedure:

...
  Finally
    Registro.Free;
  End;
end;
por:
...
    Registro.Free;
  Except
    Registro.Free;
    Raise;
  End;
end;

esta alteração não é a ideal, mas dará condições de você verificar se o erro está realmente ocorrendo neste procedimento.

Abraços

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,4k
×
×
  • Criar Novo...