Delphi-PRAXiS
Seite 3 von 3     123   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi InstallExt installiert Dateierweiterung erst nach Neustart (https://www.delphipraxis.net/90068-installext-installiert-dateierweiterung-erst-nach-neustart.html)

himitsu 13. Apr 2007 10:03

Re: InstallExt installiert Dateierweiterung erst nach Neusta
 
Zitat:

Zitat von Nils_13
Das hat mir nicht viel gebracht, da ich somit noch nicht wusste, ob mein Programm für Dateizuweisungen funktioniert oder nicht.

Also dieser Dialog richtet den Eintrag für dein Programm ganz normal ein und als erster/einziger Parameter wird dann die entsprechende Datei übergeben.



PS: hier is z.B. der RealPlayer drauf, aber der gibt zumindestens vorher Bescheid, bevor er die Einträge wieder auf sich umschreibt

PS2: es gbit ja auch noch andere Wege eine Datei zu verknüpfen (über OLE, oder so), aber ich dachte dafür wäre auch irgendein Eintrag dort nötig (das script hätte sowas dann demnach mit löschen müssen)

Nils_13 13. Apr 2007 19:19

Re: InstallExt installiert Dateierweiterung erst nach Neusta
 
Es ist doch noch nicht geschafft:
Wenn man z.B. OGG verknüpft, wird es dennoch mit dem DeliPlayerII geöffnet, da es auf diesen Player zugewiesen ist. Warum ? Das geht doch so nicht :(

Add:
Mir ist übrigens aufgefallen, dass es nur funktioniert, wenn die entsprechende Datei im gleichen Verzeichniss liegt. Sonst beendet sich das Programm. Das kann ebenfalls nur an der Registry liegen.

himitsu 17. Apr 2007 12:10

Re: InstallExt installiert Dateierweiterung erst nach Neusta
 
Zitat:

Mir ist übrigens aufgefallen, dass es nur funktioniert, wenn die entsprechende Datei im gleichen Verzeichniss liegt. Sonst beendet sich das Programm. Das kann ebenfalls nur an der Registry liegen.
Also das es nur geht, wenn Datei und Zielprogramm im selben Verzeicnis sind, daß kann eigentlich nicht an der Registry liegen, denn der Explorer ließt dort immer den gleichen Wert aus und übergibt alles auf die selbe Art, egal wo sich Programm und Datei befinden.

Du kannst es ja mal ganz einfach testen.

Erstmal versuchen das Programm per [win] > Ausführen, oder über 'ne BatchFile aufrufen (dort kannst du ja beliebig angeben wo sich was befinden soll.

Und dann nimm z.B. dieses Progrämmchen, benenne es so wie deine EXE und stell es an deren Stelle.
Delphi-Quellcode:
Program Project2;

{$APPTYPE CONSOLE}

Var F: File;

Begin
  WriteLn('Datei: "' + ParamStr(1) + '"');
  WriteLn;
  AssignFile(F, ParamStr(1));
  FileMode := $0040{fmOpenRead or fmShareDenyNone};
  {$I-}
  Reset(F);
  {$I+}
  If IOResult = 0 Then WriteLn('Datei erfolgreich ge”ffnet')
  Else WriteLn('Zugriffsfehler');
  CloseFile(F);
  WriteLn;
  WriteLn('Beenden mit ENTER');
  ReadLn;
End.
Wenn dieses den richtigen Dateinamen incl. Verzeichnis und eine Erfolgreichmeldung anzeigt, dann gibt's mit ANSI keine Probleme.
Ich vermute mal nicht, daß du nicht mit Unicode arbeitest, also sollte dieses ausreichend sein.


Die " sind auch richtig gesetzt?
Zur Sicherheit müssen ja alle Pfade/Dateien darin eingeschlossen sein.


Umgebungsvariablen (sowas wie %WinDir%) hast du nicht verwendet?
Weil dann wäre REG_SZ falsch.

Nils_13 17. Apr 2007 15:02

Re: InstallExt installiert Dateierweiterung erst nach Neusta
 
Zitat:

Datei: "E:\Musik\irgendwas.ext"
Datei erfolgreich geöffnet
Diese Meldung erhalte ich mit Öffnen Mit und Doppelklick. Nun müsste der Fehler im Code meines zugewiesenen Programms liegen. Ich sehe keinen Fehler, der gleich einen Programmabsturz verursachen könnte, erst recht nicht, dass es nur im Programmverzeichniss funktioniert:
Delphi-Quellcode:
var ffile, FileType : String;
    ArrayIndex     : Integer;
begin
  if (ParamCount > 0) and (FileExists(ParamStr(1))) then
  begin
    ffile := ExtractFileName(ParamStr(1));

    FileType := LowerCase(Trim(ExtractFileExt(ParamStr(1))));
    for ArrayIndex := 0 to 13 do
      if FileExt[ArrayIndex] = FileType then
        Break;
    if FileType <> '' then
    begin
      case ArrayIndex of
        // Audio/Video
        0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10:
        begin
          AddSingleFile(ffile);
        end;
        // Playlist
        11:
        begin
          LoadFiles(LoadM3U(ffile);
        end;
        12:
        begin
          LoadFiles(LoadASX(ffile);
        end;
        13:
        begin
          LoadFiles(LoadDPL(ffile, nil));
        end;
      end;
    end;
  end;

himitsu 17. Apr 2007 15:30

Re: InstallExt installiert Dateierweiterung erst nach Neusta
 
also warum es nur im selben Verzeichnis geht ... dat is einfach zu erklären :stupid:

mit ffile := ExtractFileName(ParamStr(1)); entfernst du die Verzeichnisangabe, weßhalb z.B. AddSingleFile(ffile); nur den Dateinamen bekommt.
Daher wird die Datei im aktuellen Arbeitsverzeichnis gesucht wird, was bei dir rein zufällig das Programmverzeichnis (muß es aber nicht).

Ach ja, meckert Delphi bei dir nicht bei ArrayIndex?
> Variable kann nach Schleifendurchlauf undefiniert sein, oder so

Delphi-Quellcode:
var FileType: String;
    ArrayIndex: Integer;
begin
  if (ParamCount = 0) or not FileExists(ParamStr(1)) then exit;

  FileType := LowerCase(Trim(ExtractFileExt(ParamStr(1))));
  for ArrayIndex := 0 to 13 do
    if FileExt[ArrayIndex] = FileType then
      case ArrayIndex of
        // Playlist
        11: LoadFiles(LoadM3U(ParamStr(1)));
        12: LoadFiles(LoadASX(ParamStr(1)));
        13: LoadFiles(LoadDPL(ParamStr(1), nil));
        // Audio/Video
        else AddSingleFile(ParamStr(1));
      end;
end;
Die Exception könnte zwar irgendwie durch ArrayIndex (innerhalb des Case-Blocks) hervorgerufen werden, aber bei 'nem Integer un dieser unkion eigentlich nich möglich.

Bleibt noch die Möglichkeit, daß die Exception in einer der verwendeten Funktionen/Prozeduren auftritt, z.B. wegen des fehlenden Pfades?
> LoadM3U, LoadASX, LoadDPL, LoadFiles und/oder AddSingleFile



hast schonmal das Programm im Debuger durchlaufen lassen?

unter Menü > Start > Parameter...
bei Parameter
Zitat:

"E:\Musik\irgendwas.ext"
eintragen und dann in Ruhe testen.

Nils_13 17. Apr 2007 15:39

Re: InstallExt installiert Dateierweiterung erst nach Neusta
 
Es gab btw. keine Exeption, das Programm hat sich schon vorher freiwillig beendet :stupid: Werde den Fehler (ExtractFileName) beseitigen :stupid:

I am so :stupid: :stupid: :stupid: :mrgreen:

Thx.


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:51 Uhr.
Seite 3 von 3     123   

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