Frage

Früher habe ich in der Lage sein eine lokal installierte Hilfsprogramm zu starten, indem Sie einen bestimmten MIME-Typ in der Windows-Registrierung zu registrieren. Dies ermöglichte es mir, damit die Benutzer der Lage sein, einmal auf einem Link auf die aktuelle klicken unserer internen Browser-Anwendung installieren. Das hat gut funktioniert in Internet Explorer 5 (die meiste Zeit) und Firefox, aber jetzt nicht in Internet Explorer 7 funktioniert.

Der Dateiname auf meine Shell / open / Befehl übergeben ist nicht der vollständige physische Pfad zum Paket heruntergeladen installieren. Der Pfad Parameter Ich reiche bin von IE ist

"C:\Document and Settings\chq-tomc\Local Settings\Temporary Internet Files\
  EIPortal_DEV_2_0_5_4[1].expd"

Dies ist leider auf die physische Datei nicht zu beheben, wenn FileExists() Aufruf oder wenn ein TFileStream Objekt zu erstellen versucht.

Der physische Pfad des Internet Explorer Unterverzeichnis versteckt Caching für temporäre Internetdateien von "Content.IE5\ALBKHO3Q" fehlt, deren absoluten Pfad als

ausgedrückt werden würde
"C:\Document and Settings\chq-tomc\Local Settings\Temporary Internet Files\ 
  Content.IE5\ALBKHO3Q\EIPortal_DEV_2_0_5_4[1].expd"

Ja, die Unterverzeichnisse zufällig generierten von IE und das sollte kein Problem sein, solange IE den vollständigen Pfad zu meiner Helfer Anwendung übergibt, die es leider nicht tut.

Installation der Mime Hilfsanwendung ist kein Problem. Es wird installiert / aktualisiert durch einen globalen Login-Skript für alle 10.000 Nutzer weltweit. Der Mime Helfer wird nur dann aufgerufen, wenn der Benutzer klickt auf einer internen Web-Seite mit einem Link zu einer Installation unserer Desktop-Browser-Anwendung. Die Installation ist mit einem MIME-Typ von "application/x-expeditors" serviert zurück. Die Registrierung des ".expd" / "application/x-expeditors" Mime-Typs sieht wie folgen aus.

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\.expd] 
@="ExpeditorsInstaller"
"Content Type"="application/x-expeditors"

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\ExpeditorsInstaller]
"EditFlags"=hex:00,00,01,00

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\ExpeditorsInstaller\shell]

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\ExpeditorsInstaller\shell\open]
@=""

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\ExpeditorsInstaller\shell\open\command]
@="\"C:\\projects\\desktop2\\WebInstaller\\WebInstaller.exe\" \"%1\""

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\MIME\Database\Content Type\application/x-expeditors]
"Extension"=".expd"

hatte ich als alle einen Benutzer IE-Cache-Einträge aufzählt, aber ich würde darum kümmern, wie lange es dauern, sie alle oder zu prüfen, daß ich vor dem aktuellen Eintrag kann am Ende einen älteren Cache-Eintrag zu finden, ich suche. Jedoch kann der klammert Dateinamensuffix "[n]" der eindeutige Schlüssel sein.

Ich habe wininet Methode GetUrlCacheEntryInfo versucht, aber das erfordert die URL, nicht der virtuelle Pfad durch IE übergeben.

Meine Hoffnung ist, dass es eine Shell-Funktion, die einen virtuellen Pfad angegeben ist, wird den physischen Pfad zurückzugeben.

War es hilfreich?

Lösung 5

Einige Follow-up auf diese Frage zu schließen.

Turned das eigentliche Problem, war, wie ich die Datei-Handle war die Schaffung TFileStream verwenden. Ich wechselte zu öffnen mit fmOpenRead oder fmShareDenyWrite , das gelöst, was eine Datei sperren Problem stellte sich heraus zu sein.

srcFile := TFileStream.Create(physicalFilename, fmOpenRead or fmShareDenyWrite);

Andere Tipps

Ich glaube, die Unterverzeichnisse von IE erstellt zufällig generiert werden, so dass Sie nicht in der Lage sein wird, Garantie, dass es jedes Mal die gleiche genannt wird, und das Problem, das ich mit der Registrierung Methode sehen, dass es nur funktioniert, wenn die Datei ist noch im Cache ... den Cache leeren würde die Datei bereinigen erfordert noch eine weitere Installation.

Wäre es nicht besser, diese Helfer in Anwendungsdaten zu installieren?

ich darüber bin nicht sicher, aber vielleicht können Sie in der richtigen Richtung führt: versuchen, URL-Cache-Funktionen aus dem wininet DLL: FindFirstUrlCacheEntry FindNextUrlCacheEntry , RetrieveUrlCacheEntryFile die Datei abzurufen.

Ich verwende ein ähnliches System mit dem X-Appl Browser WAML Web-Anwendungen angezeigt werden und es funktioniert perfekt. Vielleicht sollten Sie einen Blick darauf, wie sie es geschafft, es zu tun.

Es sieht aus wie iexplore ist die Shell-Namespace „name“ der Datei nicht dem Dateisystem Namen übergeben.

Ich denke nicht, daß es ein dokumentiertes Art und Weise ist ein Shell-Element-ID auf der Kommandozeile übergeben werden - Explorer tut es selbst, aber es gibt Marshalling Überlegungen als Shell-Element-IDs sind (Zeiger auf) binäre Datenstrukturen, die nur gültig sind, in einem einzigen Prozess.

Was könnte ich versuchen zu tun ist: 1. Rufen SHGetDesktopFolder die die Wurzel IShellFolder Aufgabe der Shell-Namensraum zurück. 2. Rufen Sie die IShellFolder :: ParseDisplayName, um den Namen, den Sie zurück in eine Shell-Element-ID-Liste angegeben. 3. Versuchen Sie, den IShellFolder :: GetDisplayNameOf mit der SHGDN_FORPARSING Flagge - was, ehrlich gesagt fühlt sich, wie w'eve nur in einem vollständigen Kreis gegangen und sind wieder da, wo wir angefangen hat. Weil ich denke, sein diese API, das ist letztlich verantwortlich für die Rückkehr des „falschen“ Dateisystem relativen Pfades.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top