Hallo,
Also kurz und knapp: Ich nutze Windows XP (Keine Diskussionen darüber. Ich kann mir kein 7 oder höher leisten und der PC ist dafür auch zu lahm. Und ich habe zu lahmes Internet!)
kein Problem, jedem Tierchen sein Pläsierchen. ;-)
und möchte darin ein eigenes Dateiformat mit einem Programm verknüpfen.
Also im Prinzip eine ganz triviale Sache.
Problem ist jedoch, dass das gewünschte Programm direkt abschmiert und streikt. Grund ist eigentlich recht leicht herauszufinden. Es wird im Ordner der Datei, welche ich mit dem Programm ausführen will, ausgeführt.
Ja, das ist so gedacht.
Und die "MeinTool.exe" wird dann im Ordner "C:\Daten" ausgeführt, was natürlich zu dem Problem führt, dass nötige DLL's und so nicht vorhanden sind.
Das sollte kein Problem sein, es sei denn, es kommt auf das "und so" an. Dynamische Bibkiotheken sucht Windows eigentlich ganz von allein zuerst im Programmverzeichnis, und falls sie da nicht zu finden sind, dann in %windir%/system32 (und dann noch in allen Verzeichnissen, die in %PATH% gelistet sind). Wenn du also alle benötigten DLLs, die nicht sowieso Bestandteil von Windows sind, ins Programmverzeichnis stopfst, sollte das Problem schon fast gelöst sein.
EDIT: Dieses Suchverfahren gilt nur für statisch gelinkte DLLs (ja, das klingt paradox, so what). Bei DLLs, die die Anwendung wirklich dynamisch mit LoadLibrary() lädt, ist sie auch komplett selbst für das Suchen und Finden der DLL verantwortlich.
Dann ist da natürlich noch das "und so" von vorhin. Wenn dein Programm zum Beispiel eine Config-Datei lesen soll, die im Programmverzeichnis liegt, muss das Programm zuerst den Pfad zu seinem eigenen Executable abfragen und dann die Datei genau in dem Verzeichnis suchen. Ich hab das in meinen Windows-Programmen immer mit der Holzhammermethode gemacht, die aber durchaus zuverlässig funktioniert:
- mit GetModuleFileName() den Namen des aktuellen Executable abfragen
- ich weiß, dass der Name auf ".exe" endet, also ersetze ich die letzten drei Zeichen durch "ini"
So in etwa könntest du auch zum Ziel kommen.
Ist es möglich, diesen "Ausführen in ..."-Pfad in der Registry unter HKEY_CLASSES_ROOT festzulegen?
Nicht dass ich wüsste.
PPS: Ich mache mein System nicht kaputt. Arbeite mit XP schon seit ich den PC habe. Habe sogar Windows 7 runtergeschmissen, damit ich XP nutzen konnte. Grund: Mehr Freiheiten. Weniger Einschränkungen. Also bitte deswegen keine Diskussionen. :D
Wie gesagt, kein Problem - ich bin mit der Argumentation genau in deiner Spur. Nur war ich vor einigen Jahren noch konsequenter und habe Windows ganz abgeschworen.
So long,
Martin