| |

VB.NET - FortgeschritteneRe: Problem mit *.chm unter Vista | |  | Autor: VbWilli | Datum: 10.03.09 10:26 |
| Hallo FZelle,
danke für den Hinweis. Ich habe den Fehler mittlerweile gefunden, nachdem ich ich an allen relevanten Stellen temporär Meldungen eingebaut hatte, um die Environment-Variablen anzeigen zu lassen. Beim Debuggen kommt man ja nicht dahinter, da es nur in der kompilierten Version im Programmordner auftritt.
Es hat auch was mit dem Ordner Program Files und dem fiktiven Ordner Programme zu tun, den es ja gar nicht gibt, sondern der ja nur ein Zeiger auf Program Files ist.
Es liegt tatsächlich an zwei Fehlern, einmal im Hilfebrowser von Vista und einmal im .NET Framework in allen Versionen:
1.) Kann der Hilfebrowser von Vista nichts mit dem Ordnernamen Programme anfangen, er ist also nicht ausreichend genug ins System eingebunden, so dass er nicht weiß, dass dies nur ein Zeiger auf Program Files ist. Und das sollte er eigentlich, da er zum System gehört. Er sucht die CHM tatsächlich unter Programme\... und macht dann gar nichts. Unter XP startet er wenigstens und zeigt an, dass er die Hilfedatei nicht anzeigen kann.
2.) Gibt es einen "gemeinen" Fehler im .NET Framework. Man ermittelt ja im Prog über die Environment-Variablen des Systems, in welchem Ordner das Prog gerade ausgeführt wird. Wurde das Prog über eine extern (also hier vom Setup) erstellte Verknüpfung gestartet, liefert das Framework den Ordnernamen Programme\... zurück (dies passiert auch, wenn man eine Verknüpfung manuell erstellt, also nicht per Drag&Drop). Startet man das Prog direkt in seinem Ordner per Doppelklick auf die exe oder zieht direkt von der exe eine Verknüpfung per Drag&Drop auf den Desktop, liefert das Framework zur Laufzeit den tatsächlichen Ordner Program Files\... zurück, mit dem der Hilfebrowser auch was anfangen kann. Daher funktionierte der Hilfeaufruf mal und mal nicht, je nachdem, wie das Prog gestartet wurde.
Abhilfe schafft hier wiederrum leider nur eine Krücke, da man sich auf den von der Environment-Variablen zurück gelieferten Path nicht verlassen kann: In der Sub, die zentral die Hilfeaufrufe steuert, frage ich nun erst mal ab, ob meine Hilfedatei unter Program Files\... existiert. Wenn ja, lass ich "Programme" ersetzen:
'In der Load-Prozedur der Applikation
....
'Beide Varianten liefern die unterschiedlichen Egebnisse
'Über My.Namespace:
AppSettings.AppPath = My.Application.Info.DirectoryPath
'oder über Sytem.Reflection
Dim fi As New IO.FileInfo( _
System.Reflection.Assembly.GetExecutingAssembly.Location)
AppSettings.AppPath = fi.DirectoryName
....
'In der Sub, die die Hilfeaufrufe steuert
....
Dim helpfile As String = AppSettings.AppPath & "\GTA.chm"
If File.Exists(helpfile.Replace("Programme", "Program Files")) = True _
Then
helpfile = helpfile.Replace("Programme", "Program Files")
End If
.... Ist nicht wirklich schön, aber läuft sicher.
Gruß
VbWilli |  |
 | Sie sind nicht angemeldet! Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.
Einloggen | Neu registrieren |
  |
|
sevISDN 1.0 
Überwachung aller eingehender Anrufe!
Die DLL erkennt alle über die CAPI-Schnittstelle eingehenden Anrufe und teilt Ihnen sogar mit, aus welchem Ortsbereich der Anruf stammt. Weitere Highlights: Online-Rufident, Erkennung der Anrufbehandlung u.v.m. Weitere InfosTipp des Monats Oktober 2025 Matthias KozlowskiUmlaute konvertierenErsetzt die Umlaute in einer Zeichenkette durch die entsprechenden Doppelbuchstaben (aus ä wird ae, usw.) Neu! sevPopUp 2.0 
Dynamische Kontextmenüs!
Erstellen Sie mit nur wenigen Zeilen Code Kontextmenüs dynamisch zur Laufzeit. Vordefinierte Styles (XP, Office, OfficeXP, Vista oder Windows 8) erleichtern die Anpassung an die eigenen Anwendung... Weitere Infos
|
|
|
Copyright ©2000-2025 vb@rchiv Dieter Otter Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.
Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel
|
|