ExtractFilePath(Application.ExeName)

Von: , Frage gestellt am Di, 11. Mär 2008

Hallo,
ich habe da mal wieder ein Problem.
ich lege den Pfad des Programmes mit
ProgrammPfad:=ExtractFilePath(Application.ExeName);
fest. Mit ProgrammPfad+'meineDatei.dat' lege ich dann fest wo 'meineDatei.dat gespeichert werden soll.
Bei Win95 bis XP klappt das auch. Nur VISTA speichert sie an anderer Stelle. Da ich es von einem Bekannten von ferne testen lasse kann ich nicht sagen wohin.

Woran liegt das und was kann ich tun, das meineDatei.dat im Programmordner gespeichert wird bzw. wo könnte mein Fehler liegen ?

Danke schon mal
Mike

5 Antworten zu dieser Frage

  1. Antwort von nach 7 Stunden 0 hilfreich
    Re: ExtractFilePath(Application.ExeName)

    Bei Win95 bis XP klappt das auch. Nur VISTA speichert sie an
    anderer Stelle. ...
    Hallo Mike,

    das ist kein Bug, sondern ein Feature: Vista weigert sich, Konfigurationsdateien u.ä. im Programmordner zu speichern, da soll der User garkeine Schreibrechte haben, und nach MS-Philosophie ist sowieso die Registry zu benutzen.

    Daher werden INI-Dateien u.ä. in Wirklichkeit irgendwo bei den "Eigenen Dateien" gespeichert. Ich glaube nicht, dass man das ohne weiteres abschalten kann - wie gesagt, der User darf ja dort, wo du es haben wolltest, nichts schreiben.

    Gruss Reinhard

  2. Antwort von nach 13 Stunden 0 hilfreich
    Re: ExtractFilePath(Application.ExeName)

    Hi Mike, Woran liegt das und was kann ich tun, das meineDatei.dat im
    Programmordner gespeichert wird bzw. wo könnte mein Fehler
    liegen ?
    Du solltest die vom Programm generierten Daten im Anwendungsdaten-Ordner speichern, den kannst Du über die Registry auslesen, AFAIK der Wert 'AppData' im Registry-Schlüssel HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders. Dort legst Du einen Ordner an und speicherst darin was Du brauchst.

    Ciao
    Rudy

    • Antwort von nach 21 Stunden 0 hilfreich
      Re^2: ExtractFilePath(Application.ExeName)

      Du solltest die vom Programm generierten Daten im
      Anwendungsdaten-Ordner speichern, den kannst Du über die
      Registry auslesen, AFAIK der Wert 'AppData' im
      Registry-Schlüssel
      HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell
      Folders. Dort legst Du einen Ordner an und speicherst darin
      was Du brauchst.

      Ich befasse mich zwar langsam mit der Registry aber so richtig klar ist mir das alles noch nicht.

      Den Anwendungsdaten-Ordner habe ich nun gefunden. Jetzt ist mir nicht ganz klar wie ich dort einen eigenen Ordner während der Installation anlegen kann, da ich eine oder auch mehrere Dateien mitliefere, die dann zur Laufzeit geändert werden sollen.

      Die Installationsroutine welche ich benutze bietet auch den Punkt:
      Registry. Kann ich damit was anfangen ?
      Ich habe mal einen Screenshot hinterlegt:

      http://www.mizeh.de/TemporaereGrafiken/Screenshot.gif

      Vielleicht kann mir ja jemand weiterhelfen.

      Ich werde auch noch ein wenig rumsuchen. Vielleicht finde ich ja selbst noch etwas, was mir weiterhilft.

      Danke auf jeden Fall schon mal
      Mike

      • Antwort von nach 2 Tagen 0 hilfreich
        Re^3: ExtractFilePath(Application.ExeName)

        Hi Mike, Den Anwendungsdaten-Ordner habe ich nun gefunden. Jetzt ist
        mir nicht ganz klar wie ich dort einen eigenen Ordner während
        der Installation anlegen kann, da ich eine oder auch mehrere
        Dateien mitliefere, die dann zur Laufzeit geändert werden
        sollen.
        Ist zwar mehrere Jahre her, seit ich einen Installer gemacht habe - und ich weiß auch nicht, welche Version bzw. welchen Installer Du verwendest - aber mit meinem damaligen Installshield kann ich mich erinnern, dass man dort die Dateien in Pakete organisiert hat, für die man dann einzeln einen Zielordner wählen konnte. Der Installer bot hier Konstanten, die sich dann automatisch an das System angepasst haben. Dann konnte man auch eigene definieren und denen zur Laufzeit dann einen Startwert zuweisen, indem man ein paar Zeilen VB-ähnlichen Codes in ein vordefiniertes Event programmiert hat. Also alles recht einfach. Die Installationsroutine welche ich benutze bietet auch den
        Punkt: Registry. Kann ich damit was anfangen ?
        Du musst ja keine Registrierungseinträge anlegen, sondern den Wert von Appdata auslesen und es schaffen, dass das Dateipaket dort in einem Unterordner abgelegt wird. Vielleicht bietet Dein Installer auch bereits eine vordefinierte Konstante für den Anwendungsdaten-Ordner? Dann reicht es ja, wenn Du den Ordner á la APPDATA\Meine Anwendung definierst - zumindest der Installer, mit dem ich gearbeitet habe, hat die Ordner alle automatisch erstellt. Details kannst Du aus der Hilfe des Installers lesen.

        Hoffe das hilft etwas weiter... sonst eröffne am besten einen Extra-Thread in Programmierung allgemein, die Experten hier, die sich mit Installern gut auskennen, lesen nicht zwangsweise hier mit :)

        Ciao
        Rudy

        • Antwort von nach 4 Tagen 0 hilfreich
          Re^4: ExtractFilePath(Application.ExeName)

          Rudy,
          je mehr ich mich mit der Registry beschäftige um so mehr fange ich an ihren Sinn und Nutzen zu kapieren.
          Und du hast mir schon oft dabei geholfen.

          Das mit dem Ordner im Anwendungsdateordner habe ich jetzt so gelöst, dass ich ein kleines Programm schreibe welches mir den Ordner nach der Installation anlegt und auch die Dateien,die ich brauche, erzeugt.
          Und dann gibt es auch noch ein kleines Programm welches nach (bzw.während) der Deinstallation seinen Müll wieder aufräumt.

          Ich denke die paar KB machen den Kohl auch nicht mehr fett ;-)

          Danke für deine bisherige Hilfe. Du hörst hier sicher noch öfter von mir, wenn ich nicht weiterkomme.

          Tschüss bis dann
          Mike

Keine passende Antwort gefunden? Jetzt eigene Frage stellen!