AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi IShellLink SetPath gibt E_INVALIDARG zurück

IShellLink SetPath gibt E_INVALIDARG zurück

Ein Thema von Dalai · begonnen am 20. Jun 2015 · letzter Beitrag vom 27. Jun 2015
Antwort Antwort
Seite 2 von 2     12
Benutzerbild von Dalai
Dalai
Online

Registriert seit: 9. Apr 2006
1.635 Beiträge
 
Delphi 5 Professional
 
#11

AW: IShellLink SetPath gibt E_INVALIDARG zurück

  Alt 27. Jun 2015, 20:19
[...] dann schildere Dein Problem bitte etwas genauer und auf das Wesentliche reduziert.
Ich denke, das ist es. Oder ist an dem Code in #1 oder dem in #2 irgendwas unklar?

Zitat:
Lt. #1 gehts Dir um "Dateinamen ohne Pfad"?
Korrekt. Mit Angabe des Pfads gibt es kein Problem, denn dann gibt OleCheck sein OK.

Zitat:
Was willst Du denn von dem (möglicherweise) frei erfundenen Dateinamen wissen?
Ich will von der Datei überhaupt nichts (naja, später schon, aber das ist optional und für das Problem irrelevant). Ich möchte wissen, warum die SetPath-Methode des Interfaces nach Prüfung mit OleCheck diese Exception spuckt, wenn die Datei nicht gefunden werden kann (im %PATH% oder wo Windows sonst so sucht). Aber wahrscheinlich wird mir nur MS diese Frage beantworten können (wenn die es überhaupt wissen), weil das Interface ja Teil der API ist.

Zitat:
Wer bekommt den Dateinamen der nicht existierenden Datei von wem?
Das steht bereits in #3: der Nutzer gibt den Dateinamen, mit oder ohne Pfad, in meine Software ein. Ob die Datei existiert, kann ich erst danach ermitteln, und das tue ich auch, um deren Eigenschaften anzuzeigen (optional).

Zitat:
P.S. Willst Du den "VirtualStore" oder wie immer das Ding heißt, mit einem in Stein gemeißelten Pfad (egal ob XP, >Vista 32-bit oder >Vista 64-bit) auf der Festplatte ermitteln?
Nein. Es geht ausschließlich um simple Verknüpfungen, genauer gesagt um das IShellLink Interface, mit dem diese erzeugt und bearbeitet werden.

MfG Dalai
  Mit Zitat antworten Zitat
redox
(Gast)

n/a Beiträge
 
#12

AW: IShellLink SetPath gibt E_INVALIDARG zurück

  Alt 27. Jun 2015, 20:56
Zitat von Dir aus #11:

"Das steht bereits in #3: der Nutzer gibt den Dateinamen, mit oder ohne Pfad, in meine Software ein. Ob die Datei existiert, kann ich erst danach ermitteln, und das tue ich auch, um deren Eigenschaften anzuzeigen (optional)."

Aha. Ich - als Nutzer - kann also "DepperterDepp.Du" als Dateinamen eintippen und Du musst herausfinden, ob es die Datei gibt?

Scheint mir eine geniale Lösung zu sein: Den Nutzer einen (frei erfundenen) Dateinamen eingeben zu lassen...

Viel Spaß beim Suchen!
  Mit Zitat antworten Zitat
Benutzerbild von Dalai
Dalai
Online

Registriert seit: 9. Apr 2006
1.635 Beiträge
 
Delphi 5 Professional
 
#13

AW: IShellLink SetPath gibt E_INVALIDARG zurück

  Alt 27. Jun 2015, 21:16
Scheint mir eine geniale Lösung zu sein: Den Nutzer einen (frei erfundenen) Dateinamen eingeben zu lassen...
Nochmal: Es geht nicht darum, ob der Dateiname erfunden ist, sondern ob ein Algorithmus zuverlässig in der Lage wäre, den eingegebenen Dateinamen vor der Übergabe an SetPath zu finden und bei Nichtexistenz abzulehnen. Wenn du einen zuverlässigen Algo hast, der unter allen Umständen funktioniert, dann her damit. Dabei dürfen natürlich keine Kollateralschäden entstehen, d.h. eine existierende Datei wird nicht gefunden (und daher vor der Übergabe an SetPath abgelehnt), oder umgekehrt eine nicht existierende Datei wird an SetPath übergeben.

Bis dahin bleibe ich dabei, die Exception zu zeigen, und so die Verantwortung an den Nutzer zurückzugeben. Wenn der Nutzer irgendwas nicht-existierendes eingibt, ist das sein Problem.

MfG Dalai
  Mit Zitat antworten Zitat
redox
(Gast)

n/a Beiträge
 
#14

AW: IShellLink SetPath gibt E_INVALIDARG zurück

  Alt 27. Jun 2015, 21:43
Der "zuverlässig Algo" ist recht einfach. Alle Partitionen durchsuchen und die Fundstellen ggfs. noch mit der "heutigen" Uhrzeit vergleichen. Dauert halt ein wenig bei 0,5 bis 2,3 TB auf lokalen Datenträgern

Danach könnte man noch - um die Zuverlässigkeit zu erhöhen - noch alle Clouds weltweit überprüfen. Dauert halt noch ein wenig länger, denn wer weiß denn schon, wohin der Nutzer gerade gespeichert hat...

Was spricht dagegen, den Nutzer dazu zu ZWINGEN, einen SaveDialog zu verwenden?

Also: Du willst Sachen im Universum zuverlässig und schnell finden, die es möglicherweise nicht gibt?

Das würde ich mal als gediegen "anspruchsvoll" bezeichnen wollen

Aber noch ziemlich harmlos - verglichen mit dem Abfangen eines SaveDialog.Filenames aus einem Paralleluniversums der Stringwelten!

SCNR
  Mit Zitat antworten Zitat
Benutzerbild von Dalai
Dalai
Online

Registriert seit: 9. Apr 2006
1.635 Beiträge
 
Delphi 5 Professional
 
#15

AW: IShellLink SetPath gibt E_INVALIDARG zurück

  Alt 27. Jun 2015, 22:18
Tja, das Wesentliche war wohl doch zu stark reduziert...

Dem Nutzer wird die Möglichkeit gegeben, eine Kommandozeile zu editieren, unter anderem die von Verknüpfungen. Ob es da nun einen Dialog zur Auswahl einer Datei gibt oder nicht, spielt keine Rolle, weil der Nutzer trotzdem in der Eingabe frei ist und sein muss; ein Savedialog macht in dem Zusammenhang aber überhaupt keinen Sinn.

Diese Kommandozeile wird dann von mir auseinandergenommen und in Datei und Parameter gesplittet. Diese beiden Strings werden dann im Falle von Verknüpfungen an SetPath und SetArguments übergeben.

Die Datei wird gesucht, um ggf. deren Eigenschaften zu ermitteln und anzuzeigen. Aber diese Suche hat eben Grenzen. Ich habe einfach keine Lust, alle möglichen "Tricks" von Windows nachzuahmen, um auch wirklich alles zu unternehmen, die Datei zu finden. Es ist ja nicht nur der %PATH%, der durchsucht wird. Nein, es gibt da noch so tolle Sachen wie
Code:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths
wo Dateinamen drinstehen, die irgendwo liegen können und Windows findet die auch dann, wenn dessen Verzeichnis nicht im %PATH% steht. Und wahrscheinlich gibt's da noch andere Dinge, an die ich nicht einmal gedacht habe. Und mit jeder Windows-Version könnte etwas Neues hinzukommen.

Du siehst also: so simpel ist das nicht. Daher beschränke ich den Algorithmus auf das Wesentliche, und zeige dem Nutzer die Exception, wenn er - ob absichtlich oder nicht - einen nicht-existierenden Dateinamen angibt.

MfG Dalai
  Mit Zitat antworten Zitat
redox
(Gast)

n/a Beiträge
 
#16

AW: IShellLink SetPath gibt E_INVALIDARG zurück

  Alt 27. Jun 2015, 22:46
Und so ein Kommandozeilen-Eingabefenster muss echt sein, denn der Nutzer muss den Rechner (und Dein Programm) auch wirklich echt Verschrotten können? Ehrensache!

Ohne PC hätte ich deutlich weniger PC-Probleme...
  Mit Zitat antworten Zitat
Benutzerbild von Dalai
Dalai
Online

Registriert seit: 9. Apr 2006
1.635 Beiträge
 
Delphi 5 Professional
 
#17

AW: IShellLink SetPath gibt E_INVALIDARG zurück

  Alt 27. Jun 2015, 23:13
Wirklich ein hilfreicher Beitrag ... echt, Ehrensache ...

Hättest du ein Problem und jemand würde dir mit einer solchen Antwort kommen, würde dir das helfen? Ich glaube kaum. Ich bin ja dankbar für Hilfe und ich hab auch nichts gegen Kommentare und Witze, aber keines davon vermag ich deinem Beitrag zu entnehmen.

Geändert von Dalai (28. Jun 2015 um 02:29 Uhr) Grund: Formulierung geändert
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:26 Uhr.
Powered by vBulletin® Copyright ©2000 - 2022, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf