Existe alguma forma de capturar o caminho do .exe?
amigos,
coloquei um arquivo .ini que indica o caminho do bd para que no acesso
ele configure o database, mas gostaria de melhorar, independente da unidade ou diretorio que colocar a pasta q contem os arquivos .exe e .ini
quando eu executasse o programa ele verificasse o caminho onde se encontra
ex:
c:\projeto\teste
ou
d:\arquivos de programas\projeto\teste
apartir dai eu gravaria no arquivo.ini o caminho do bd
desde ja agradeço
delphi7.0 e firebird
coloquei um arquivo .ini que indica o caminho do bd para que no acesso
ele configure o database, mas gostaria de melhorar, independente da unidade ou diretorio que colocar a pasta q contem os arquivos .exe e .ini
quando eu executasse o programa ele verificasse o caminho onde se encontra
ex:
c:\projeto\teste
ou
d:\arquivos de programas\projeto\teste
apartir dai eu gravaria no arquivo.ini o caminho do bd
desde ja agradeço
delphi7.0 e firebird
Marcusbraga
Curtidas 0
Respostas
Massuda
09/03/2005
Duas formas para obter o caminho para onde o programa está instalado:
var S: string; ... S := ExtractFilePath(Application.ExeName); // ou S := ExtractFilePath(ParamStr(0));
GOSTEI 0
Silviogs
09/03/2005
Olá
function GetExe(Ext : string) : string;
//
// Retorna o path completo do aplicativo que está associado
// ao arquivo cuja extensão você colocou em Ext
//
// Exemplo:
//
// Showmessage(GetExe(´txt´));
// Vai retornar: C:\Windows\Notepad.exe
//
var
reg: TRegistry; s : string;
I: integer;
begin
s := ´´;
reg := TRegistry.Create;
reg.RootKey := HKEY_CLASSES_ROOT;
if reg.OpenKey(´.´ + ext + ´\shell\open\command´,false) <> false then
begin
s := reg.ReadString(´´);
reg.CloseKey;
end
else
begin
if reg.OpenKey(´.´ + ext, false) <> false then
begin
s := reg.ReadString(´´);
reg.CloseKey;
if s <> ´´ then
begin
if reg.OpenKey(s + ´\shell\open\command´,false) <> false then
begin
s := reg.ReadString(´´);
end;
reg.CloseKey;
end;
end;
end;
if ((length(s) > 0) and (s[1] = ´´´)) then
Delete(s, 1, 1);
i := pos(´.EXE´,uppercase(S));
if I = 0 then
begin
Result := ´´
end
else
begin
Result := copy(S, 1, i +3);
end;
end;
Atenciosamente
Silvio Guedes
function GetExe(Ext : string) : string;
//
// Retorna o path completo do aplicativo que está associado
// ao arquivo cuja extensão você colocou em Ext
//
// Exemplo:
//
// Showmessage(GetExe(´txt´));
// Vai retornar: C:\Windows\Notepad.exe
//
var
reg: TRegistry; s : string;
I: integer;
begin
s := ´´;
reg := TRegistry.Create;
reg.RootKey := HKEY_CLASSES_ROOT;
if reg.OpenKey(´.´ + ext + ´\shell\open\command´,false) <> false then
begin
s := reg.ReadString(´´);
reg.CloseKey;
end
else
begin
if reg.OpenKey(´.´ + ext, false) <> false then
begin
s := reg.ReadString(´´);
reg.CloseKey;
if s <> ´´ then
begin
if reg.OpenKey(s + ´\shell\open\command´,false) <> false then
begin
s := reg.ReadString(´´);
end;
reg.CloseKey;
end;
end;
end;
if ((length(s) > 0) and (s[1] = ´´´)) then
Delete(s, 1, 1);
i := pos(´.EXE´,uppercase(S));
if I = 0 then
begin
Result := ´´
end
else
begin
Result := copy(S, 1, i +3);
end;
end;
Atenciosamente
Silvio Guedes
GOSTEI 0
Marcusbraga
09/03/2005
valeu massuda mais uma vez...
Só mais uma pergunta isso seria viável? ou pode dar algum pane mais tarde por toda vez que eu abrir o programa ele gravar novamente o arquivo
ou seria mais viavel eu manter fixo o caminho no ini e mudar manualmente somente quando for preciso?
obrigado...
Só mais uma pergunta isso seria viável? ou pode dar algum pane mais tarde por toda vez que eu abrir o programa ele gravar novamente o arquivo
ou seria mais viavel eu manter fixo o caminho no ini e mudar manualmente somente quando for preciso?
obrigado...
GOSTEI 0
Massuda
09/03/2005
... isso seria viável? ou pode dar algum pane mais tarde por toda vez que eu abrir o programa ele gravar novamente o arquivo ou seria mais viavel eu manter fixo o caminho no ini e mudar manualmente somente quando for preciso?
Já fiz programas que funcionam gravando os dados de configuração em um arquivo .INI no mesmo diretório do programa (ou um subdiretório dele).Algo que lembrei agora... existe um problema relacionado com o fato do usuário ser ou não administrador da máquina e o diretório onde o programa está instalado. Talvez não seja seu caso, mas lá vai...
Numa máquina com múltiplos usuários com diferentes permissões, a não ser que o usuário seja administrador da máquina, ele não tem permissão para escrever em qualquer um dos subdiretórios de c:\Arquivos de Programas, que é onde normalmente se instala um programa.
Um jeito fácil de contornar esse problema é instalar seu programa em um subdiretório novo (por exemplo, c:\MeuPrograma); assim, apesar de somente um administrador da máquina poder instalar seu programa, o usuário normal poderá utilizá-lo sem problemas.
Agora, pode ser que você precise mesmo instalar seu programa em c:\Arquivos de Programas. Avise se for seu caso.
GOSTEI 0