Alexander (HH): INI-Datei verschieben

Beitrag lesen

Moin Moin!

Nein, ich weiß, wie man Dateien verschiebt. ;-)

Ich bzw. wir müssen uns mit einer Entwicklungsumgebung + Runtime herumschlagen, die einen Großteil ihrer Einstellungen in einer zentralen INI-Datei ablegt und sie dort natürlich auch wieder sucht. Blöderweise erwartet dieses System die INI-Datei im Windows-Verzeichnis und nicht in dem Verzeichnis, in dem wir unsere Projekte verwalten. Zu jedem Projekt gehören größere Änderungen an der INI-Datei, es wäre also extrem sinnvoll und nützlich, diese Datei zusammen mit dem Rest des Projekts unter eine Versionskontrolle zu stellen.

Letztlich ruft die Anwendung über ein paar Abstraktionslayer die Windows-API-Funktionen GetPrivateProfileString(), GetPrivateProfileInt() und WritePrivateProfileString() auf, das läßt sich anhand der Strings in den EXE-Dateien nachvollziehen. Der jeweils letzte Parameter, lpFileName, ist entweder nur der reine Dateiname "blafasel.ini", oder aber einer der Wrapper bastelt noch den Namen des Windows-Verzeichnisses vor "blafasel.ini", das kann ich im Moment nicht sehen. Egal wie, in beiden Fällen sucht Windows die INI-Datei ausschließlich im Windows-Verzeichnis, und da gehört sie wenigstens auf den Entwickler-Systemen nicht hin.

Ich suche also irgendeinen Kniff, wie ich Windows oder die Anwendung dazu bringe, die INI-Datei in einem Verzeichnis meiner Wahl zu suchen. Das in Windows implementierte IniFileMapping klingt zwar schön, aber murkst die INI-Dateien nur in die Registry-Müllhalde, wo sie noch schlechter kontrollierbar sind.

Die Original-EXEs können wir nicht ändern, Zugriff auf Quelltexte gibt's schon mal gar nicht, und eine Spezialversion der Umgebung wird man uns nicht bauen.

Bleibt also eigentlich nur noch, die Programme zur Laufzeit auszutricksen. Man müßte die drei Funktionen auf eigene Funktionen umbiegen, so ähnlich wie das iwatch aus dem c't-Artikel Wachtmeister macht, um den Original-Funktionen den "richtigen" Verzeichnispfad mitzugeben.

Ein Aufruf à la "LOADER.EXE /ini=D:\svnhome\project42\blafasel.ini DEVELOP.EXE" bzw. "LOADER.EXE /ini=D:\svnhome\project42\blafasel.ini RUNTIME.EXE project42" wäre für uns Entwickler überhaupt kein Problem, sondern quasi die Ideallösung, mit der wir die Projekte sauber voneinander trennen könnten.

Gibt's was fertiges dafür? Irgendwelche Hinweise? Alternative Ideen?

Alexander

--
Today I will gladly share my knowledge and experience, for there are no sweeter words than "I told you so".