AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Delphi *.Lnk Verknüpfungen funktionieren nicht.
Thema durchsuchen
Ansicht
Themen-Optionen

*.Lnk Verknüpfungen funktionieren nicht.

Ein Thema von EWeiss · begonnen am 13. Mai 2017 · letzter Beitrag vom 17. Mai 2017
Antwort Antwort
Seite 1 von 2  1 2      
bnreimer42

Registriert seit: 26. Mai 2013
Ort: Erlangen, Franken
129 Beiträge
 
Delphi 12 Athens
 
#1

AW: *.Lnk Verknüpfungen funktionieren nicht.

  Alt 13. Mai 2017, 09:20
Habe gerade kein Delphi da, aber das klingt nach einem Problem mit dieser untransparenten Folderumleitung von 32 Bit Prozessen unter 64 Bit Windows.

Start über den Explorer = 64 Bit App greift auf exakt den geplanten Ordner zu.

Delphi 32 Bit App bekommt möglicherweise von Windows einen anderen Ordner virtuell reingemappt.

Kannst Du einfach mal ein ShellExecute reinbauen, bei dem Du nur den Ordner öffnest ohne Datei? Es sollte ein Explorer aufgehen,d er Dir genau zeigt, wo Deine Anwendung wirklich hin greift.

Ich kenne das insbesondere beim system32 Verzeichnis wo eine 32 Bit App beim Zugriff auf c:\windows\system32 in Wirklichkeit unter C:\Windows\SysWOW64 landet.
Björn Reimer
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#2

AW: *.Lnk Verknüpfungen funktionieren nicht.

  Alt 13. Mai 2017, 09:26
Zitat:
Kannst Du einfach mal ein ShellExecute reinbauen, bei dem Du nur den Ordner öffnest ohne Datei? Es sollte ein Explorer aufgehen,d er Dir genau zeigt, wo Deine Anwendung wirklich hin greift.
Ich denke das ist nicht so einfach.
Wenn ich die Anwendung nicht öffnen kann dann öffnet es mir auch nicht das Arbeitsverzeichnis dieser Anwendung.

Normale 32Bit Anwendungs-Verknüpfungen laufen hatte da bisher noch kein Problem.
Es ist ja nicht so das ich zu blöd dafür wäre die korrekten Parameter an ShellExecute zu übergeben aber anscheinend meinen das hier einige.
Destotrotz scheint es wirklich unterschiede zu geben wenn man Verknüpfungen von 64Bit Anwendungen mit einer 32Bit Anwendung öffnen will.


gruss

Geändert von EWeiss (13. Mai 2017 um 10:16 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
10.055 Beiträge
 
Delphi 12 Athens
 
#3

AW: *.Lnk Verknüpfungen funktionieren nicht.

  Alt 13. Mai 2017, 10:25
Ich habe mir einmal angeschaut wie das funktioniert. Der Process Monitor wurde ja schon zweimal erwähnt. Da sieht man das sehr einfach.

Wenn die Verknüpfung ausgeführt wird, wird der Pfad gar nicht angesprochen. Stattdessen läuft das ganze aus der explorer.exe über die windows.storage.dll, die CommandLineFromMsiDescriptor aus der advapi32.dll aufruft und darin dann über MsiProvideComponentFromDescriptorW aus der msi.dll und deren MsiGetComponentPathW den Pfad ermittelt.
Das passiert über den angegebenen Exe-Pfad über die entsprechende Registrierung in HKCR\Installer\Features\00005109110000000100000000 F01FEC. Der Pfad zur Exe steht am Ende in HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Ins taller\UserData\S-1-5-18\Components\ FDB90FF6780B32E49A9B72D2FB6D0499\00005109110000000 100000000F01FEC. Und dann wird einfach die winword.exe in dem Pfad unter Program Files aufgerufen.

Sprich die angegebene Exe aus der Verknüpfung existiert gar nicht.

Ich verstehe allerdings auch nicht warum du die .lnk ausliest und ausführst anstatt einfach die Verknüpfung auszuführen. Dafür ist sie ja da. Das funktioniert hier auch problemlos:
Delphi-Quellcode:
ShellExecute(Handle, 'open', 'explorer',
  'C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Microsoft Office 2013\Word 2013.lnk', '', SW_SHOW);
Zitat:
ShellExecute hat immer einen Rückgabewert. Und dein Problem ist doch, dass es nicht funktioniert, also wieso sollte der Rückgabewert nichts aussagen?
Ich sage nochmal den braucht man nicht denn Windows wirft die Meldung von selbst wenn was nicht stimmt.
Ohne das man sich da selbst noch mit rumschlagen muss.
Das passiert nur, wenn der Aufruf selbst klappt und dann danach etwas schief geht. Zum Beispiel wenn die explorer.exe aufgerufen wird und dann dort etwas schief geht.

In diesem Fall liefert ShellExecute aber 2 zurück, was laut Doku heißt (oh Wunder) ERROR_FILE_NOT_FOUND. Hättest du gleich dies geschrieben, wären wir schon längst weiter gewesen...
Sebastian Jänicke
AppCentral

Geändert von jaenicke (13. Mai 2017 um 10:31 Uhr)
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#4

AW: *.Lnk Verknüpfungen funktionieren nicht.

  Alt 13. Mai 2017, 10:44
Zitat:
Ich verstehe allerdings auch nicht warum du die .lnk ausliest und ausführst anstatt einfach die Verknüpfung auszuführen. Dafür ist sie ja da. Das funktioniert hier auch problemlos:
Ich verstehe nicht das ihr nicht versteht das es durchaus sinn machen kann wenn man dinge tut die andere nicht verstehen wollen oder können.
Aber das ist ganz einfach erklärt.

Ich habe eine Anwendung geschrieben die sich da nennt OverTheTaskbar. (OTTB.exe)
Das ist eine im Mac style ausgelegte Bar in der sich alle Anwendungen die man so benötigt integriert werden.

Es soll Leute geben die 30 > 100 Icons auf dem Desktop liegen haben.
Wenn meine Anwendung gestartet wird scannt diese alle Verknüpfungen auf dem Desktop und addiert diese zu OTTB.

Der Desktop wird dann stillgelegt und die Anwendungen können dann aus der Bar heraus gestartet werden.

Ich habe dann einen aufgeräumten Desktop und komme trotzdem noch an alle meine Daten.
Und nein falls diese Frage auftaucht.. es wird nichts gelöscht und die Icons vom Desktop können bei bedarf über ein Menü
wieder eigeschaltet werden.

Jetzt hänge ich doch nochmal ein Bild an.
Zitat:
In diesem Fall liefert ShellExecute aber 2 zurück, was laut Doku heißt (oh Wunder) ERROR_FILE_NOT_FOUND. Hättest du gleich dies geschrieben, wären wir schon längst weiter gewesen...
Nun dafür muss ich aber die Fehlerbehandlung nicht selbst gegenprüfen (Shellexecute bedingt) Windows macht das für mich.
Das wäre doppelt gemoppelt

gruss

Geändert von EWeiss (11. Jul 2019 um 15:47 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
10.055 Beiträge
 
Delphi 12 Athens
 
#5

AW: *.Lnk Verknüpfungen funktionieren nicht.

  Alt 13. Mai 2017, 10:59
Ich verstehe nicht das ihr nicht versteht das es durchaus sinn machen kann wenn man dinge tut die andere nicht verstehen wollen oder können.
Aber das ist ganz einfach erklärt.
[...]
Und nein falls diese Frage auftaucht.. es wird nichts gelöscht und die Icons vom Desktop können bei bedarf über ein Menü
wieder eigeschaltet werden.
Dann führe die Verknüpfungen doch einfach aus. Ansonsten bliebe nur die Funktionalität der explorer.exe nachzubilden, die eben nicht nur den Pfad aus der .lnk ausliest, sondern auch die genannten DLLs benutzt um den echten Pfad zu ermitteln.

Zitat:
In diesem Fall liefert ShellExecute aber 2 zurück, was laut Doku heißt (oh Wunder) ERROR_FILE_NOT_FOUND. Hättest du gleich dies geschrieben, wären wir schon längst weiter gewesen...
Nun dafür muss ich aber die Fehlerbehandlung nicht selbst gegenprüfen (Shellexecute bedingt) Windows macht das für mich.
Das wäre doppelt gemoppelt
Ich habe alles eben noch einmal durchgeschaut. Davon, dass der Fehler ist, dass die Datei nicht gefunden wurde, lese ich nirgends etwas. Wenn das auch so schon klar war ohne den Rückgabewert, dann wäre es schön gewesen das auch dazuzuschreiben...
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#6

AW: *.Lnk Verknüpfungen funktionieren nicht.

  Alt 13. Mai 2017, 11:00
Zitat:
Sprich die angegebene Exe aus der Verknüpfung existiert gar nicht.
Klar existiert die wer sagt dir das es nicht so ist?
OB sie nun ausführbar ist, das ist eine andere Geschichte.

Zitat:
Dann führe die Verknüpfungen doch einfach aus.
Theoretisch wäre es ja auch kein Problem es auf deine weise zu tun.
Aber praktisch ist es so das ich nicht auswählen kann was der User auf den Desktop legt.. Oder?

Und aussortieren kann ich da auch nichts.
Wiederum aus der Bar Anwendungen aus dem Startmenu zu starten macht keinen sinn.
Diese soll ja kein Ersatz für das Startmenu sein.

gruss

Geändert von EWeiss (11. Jul 2019 um 15:47 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Dalai
Dalai

Registriert seit: 9. Apr 2006
1.684 Beiträge
 
Delphi 5 Professional
 
#7

AW: *.Lnk Verknüpfungen funktionieren nicht.

  Alt 13. Mai 2017, 13:11
Also, die EXEn in C:\Windows\Installer existieren natürlich, allerdings sind das KEINE normalen EXEn der jeweiligen Anwendungen sondern sie enthalten - wie der Dateiname auch schon vermuten lässt - lediglich Ressourcen, hier Icons.

Daher auch die Meldung "Ist keine gültige Win32-Anwendung". Ich habe mit dieser Geschichte auch schon zu tun gehabt, als ich ein Plugin für Total Commander schrieb und im Zuge dessen mit Verknüpfungen (LNKs) "rumgespielt" habe.

Lösung: LNK ausführen, ist viel einfacher. Es steckt in LNKs noch jede Menge Krempel, den man sonst von Hand nachbilden müsste.

Grüße
Dalai
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#8

AW: *.Lnk Verknüpfungen funktionieren nicht.

  Alt 13. Mai 2017, 13:17
Zitat:
Lösung: LNK ausführen, ist viel einfacher. Es steckt in LNKs noch jede Menge Krempel, den man sonst von Hand nachbilden müsste.
Die frage ist nur wie soll ich den Pfad parsen wenn ich die Shortcuts vom Desktop einlese.
Denke mal das sollte nicht so einfach sein.

Denn wie gesagt ich möchte keine Dateien vom Startmenu addieren.
Und wenn jemand Word auf den Desktop abgelegt hat was dann ?

Zitat:
lediglich Ressourcen, hier Icons.
Ja deshalb bekomme ich bei einigen auch das Package Icon geliefert anstelle das von der EXE.

gruss

Geändert von EWeiss (13. Mai 2017 um 13:20 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
10.055 Beiträge
 
Delphi 12 Athens
 
#9

AW: *.Lnk Verknüpfungen funktionieren nicht.

  Alt 13. Mai 2017, 13:21
Also, die EXEn in C:\Windows\Installer existieren natürlich, allerdings sind das KEINE normalen EXEn der jeweiligen Anwendungen sondern sie enthalten - wie der Dateiname auch schon vermuten lässt - lediglich Ressourcen, hier Icons.
Bei mir nicht. Weder Windows noch Linux finden dort den Ordner. Und laut Process Monitor gibt es zumindest beim Starten der Verknüpfung für Word 2010 auch keinen Zugriff darauf.
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
madas

Registriert seit: 9. Aug 2007
207 Beiträge
 
#10

AW: *.Lnk Verknüpfungen funktionieren nicht.

  Alt 15. Mai 2017, 09:04
Ich habe eine Anwendung geschrieben die sich da nennt OverTheTaskbar. (OTTB.exe)
Das ist eine im Mac style ausgelegte Bar in der sich alle Anwendungen die man so benötigt integriert werden.

Es soll Leute geben die 30 > 100 Icons auf dem Desktop liegen haben.
Wenn meine Anwendung gestartet wird scannt diese alle Verknüpfungen auf dem Desktop und addiert diese zu OTTB.
Hm es soll Leute geben, bei denen liegt nur der Papierkorb auf dem Desktop. Was bringt Dein Programm diesen Leuten für Vorteile?
Mal ehrlich: Anwendungen, die man sehr häufig benutzt (mehr als 10-15 Stück werden das bestimmt nicht sein), kommen in die Windows-Standard-Taskbar.
Der Rest ist über Windows-Taste und Eingabe des Programmnamens sehr leicht zu finden bzw. zu starten. Daher erschließt sich mir der Sinn Deines
Taskbar-Aufsatzes nicht wirklich.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 07:20 Uhr.
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