Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi ParamStr(0) mit UNC-Pfad (https://www.delphipraxis.net/194515-paramstr-0-mit-unc-pfad.html)

Sherlock 1. Dez 2017 11:46

ParamStr(0) mit UNC-Pfad
 
Hi zusammen,

ich hab da ein drolliges Problemchen. Ich möchte meiner Anwendung ermöglichen in ihrem Ordner nach einer Datei zu schauen. Ist eigentlich schnell gemacht, ohne sonstige Fehlerbehandlung, Fallbacks und SchnickSchnak erhält man:
Delphi-Quellcode:
if FileExists(TPath.Combine(TPath.GetDirectoryName(paramstr(0)), 'some.ini')) then
    myIni := TIniFile.Create(TPath.Combine(TPath.GetDirectoryName(paramstr(0)), 'some.ini');
Das funktioniert...bis man die Exe von einem UNC-Pfad startet. Dann landet man in c:\windows :shock:

Ich weiß leider nicht, welche "archaischen" Techniken verwendet werden, um paramstr(0) zu befüllen, aber kann es etwas mit dem Problem zu tun haben, daß die cmd.exe (auch bekannt als DOS-Prompt), keine UNC-Pfade kann?

Wie komme ich unter diesen Umständen zu meinem Ausführungsverzeichnis?

Sherlock

Delphi.Narium 1. Dez 2017 12:03

AW: ParamStr(0) mit UNC-Pfad
 
Delphi-Quellcode:
var
  sFilename : String;
begin
  sFilename := Format('%s\some.ini',[ExtractFilePath(Application.ExeName)]);
  if FileExists(sFilename) then myIni := TIniFile.Create(sFilename);
end;
Eventuell funktioniert es auch so:
Delphi-Quellcode:
var
  sFilename : String;
begin
  sFilename := '.\some.ini';
  if FileExists(sFilename) then myIni := TIniFile.Create(sFilename);
end;

Der schöne Günther 1. Dez 2017 12:22

AW: ParamStr(0) mit UNC-Pfad
 
Ich weiß aber ehrlich gesagt nicht was dein Problem ist, denn ParamStr(0) liefert bei mir immer was es soll, sowohl für
\\someServer\someShare\Project1.exe
sowie
\\?\C:\somePath\Project1.exe

Letzteres wird hierbei als C:\somePath\Project1.exe ausgegeben. Ist das das Problem? Ich habe nix mit C:\Windows.

Sherlock 1. Dez 2017 12:28

AW: ParamStr(0) mit UNC-Pfad
 
Hmmm... ich nehme alles zurück und behaupte das Gegenteil. Es läuft in einem kleinen Testprojekt wie erwartet. Mit UNC-Pfad und allem. Danke trotzdem Delphi.narium und Günther. Ich habe nur in dem eigentlichen Projekt per ProcMon sehen können, das in c:\windows nach meiner ini-Datei gesucht wurde. Muss eine andere Ursache haben... Grrrr

Edith hat noch eine kleine Anmerkung: Application.ExeName gibt es unter FMX nicht, hatte ich aber auch nicht angegeben, sorry. Unter VCL führt Application.ExeName aber auch nur paramstr(0) aus ;)

Sherlock

LTE5 1. Dez 2017 12:31

AW: ParamStr(0) mit UNC-Pfad
 
Wenn du schonmal dabei bist

Warum nicht...
Delphi-Quellcode:
if FileExists(ExtractFilePath(paramstr(0)) + 'some.ini') then

// statt viel zu kompliziert ...
if FileExists(TPath.Combine(TPath.GetDirectoryName(paramstr(0)), 'some.ini')) then

Codehunter 1. Dez 2017 12:37

AW: ParamStr(0) mit UNC-Pfad
 
Ich meine mich zu erinnern, dass ParamStr schon mal als deprecated gekennzeichnet war und dass man doch bitteschön Application.Exename verwenden sollte. Doch schau mal einer guck:
Delphi-Quellcode:
function TApplication.GetExeName: string;
begin
  Result := ParamStr(0);
end;

Sherlock 1. Dez 2017 12:38

AW: ParamStr(0) mit UNC-Pfad
 
Klar, das geht auch, Danke. Ist nur bei mir mittlerweile reine Gewohnheit Pfade und Dateinamen so zusammenzusetzen. Dann geht bei plattformübergreifenden Anwendungen zumindest in der Hinsicht nichts schief (/ statt \).

Sherlock

LTE5 1. Dez 2017 12:39

AW: ParamStr(0) mit UNC-Pfad
 
ParamStr ist deprecated und wird von ExeName verwendet :roll:

Wenn ParamStr aber auch deprecated ist, wie soll man dann an übergebene Parameter kommen?

Der schöne Günther 1. Dez 2017 12:42

AW: ParamStr(0) mit UNC-Pfad
 
Geh doch mal mit dem Debugger durch wo der erste Quatsch liefert. Ist es Paramstr(0)?

LTE5 1. Dez 2017 12:46

AW: ParamStr(0) mit UNC-Pfad
 
Starter-Version :thumb:


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:55 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz