Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Zwischen Test- und Datenverzeichnis unterscheiden. (https://www.delphipraxis.net/131569-zwischen-test-und-datenverzeichnis-unterscheiden.html)

RaSoWa1 26. Mär 2009 19:11


Zwischen Test- und Datenverzeichnis unterscheiden.
 
Hallo,

vor kurzem mußte ich auf Windows Vista umsteigen. Ich bin jetzt dabei die Datenspeicherung meiner Programme "Vista-tauglich" zu machen.
In meinen Programmen speichern jetzt die Daten in "SpecialDirectory(CSIDL_APPDATA)" ab.
Ich bin ein Hobby-Programmierer und schreibe die Programme mit Delphi 6 hauptsächlich um mir das Leben etwas leichter zu machen.
D.h. die Programme werden auf dem gleichen Rechner entwickelt und genutzt.

Nun das Problem:
Beim Testen arbeite ich nun mit meinen echten Daten! Auch die Testversionen speichern ja nun nicht mehr im Prog-Path sondern in AppData!

Ich könnte zwar prüfen in welchem Verzeichnis das Programm läuft (Delpi-Project-Path oder Programm Files) und entsprechen reagieren.
Ich finde, das ist keine gute Lösung. Aber was besseres fällt mir zur Zeit nicht ein.

Hat vielleicht von euch jemand eine bessere Idee?

Ich bin für jeden Ratschlag dankbar.

Gruß Klaus

jaenicke 26. Mär 2009 19:18

Re: Zwischen Test- und Datenverzeichnis unterscheiden.
 
Such einfach zuerst im eigenen Verzeichnis nach einer Einstellungsdatei und dann erst in den Anwendungsdaten.

Liegt keine Datei in einem der Verzeichnisse, dann zeig einen Einstellungsassitenten an, der den Benutzer u.a. fragt wo die Einstellungen hin sollen, portabel oder ins Anwendungsdatenverzeichnis.
Du kannst ja da auch testen, ob das Programm keine Adminrechte hat gerade und wenn nein, ob es überhaupt ins eigene Verzeichnis schreiben könnte (wenn es welche hätte, könnte es eh schreiben, deshalb musst du die aktuellen Rechte prüfen). Dann brauchst du die Option gar nicht anzubieten, wenn das gar nicht geht.

RaSoWa1 26. Mär 2009 21:04

Re: Zwischen Test- und Datenverzeichnis unterscheiden.
 
Hallo,

im Prinzip mache ich es schon so wie du vorgeschlagen hast. Zuerst suche ich Dateien im eigenen Verzeichnis (wegen der Abwärtskompatibilität), dann in "C:\Users\Name\AppData". Das Ergebnis der Benutzerabfrage muß ich ja auch in einem dieser Verzeichnisse speichern, damit ich es wiederfinde. Die Restry möchte ich nach Möglichkeit vermeiden.

Das Problem ist:
Ich habe die Programme auf dem Rechner 2 x installiert. Einmal als Vollversion in "C:\Program Files" und einmal als Testversion im Delphi-Verzeichnis.
Die Vollversion speichern die Daten Standardmäßig unter "C:\Users\Name\AppData\ProgrammName", da sie keinen Schreibrechte in "C:\Program Files" hat. Die Testversion benutzt demzuvolge auch das Verzeichnis "C:\Users\Name\AppData\ProgrammName" für die Daten. D.h. ich teste eine neue Version mit den original Daten.

Wie kann ich auf eine einfache Art und Weise erreichen, daß nur das Testprogramm die Daten nach z.B.: "C:\Users\Name\AppData\Test\ProgrammName" speichert?

Gruß Klaus.

jaenicke 26. Mär 2009 21:53

Re: Zwischen Test- und Datenverzeichnis unterscheiden.
 
Eine Möglichkeit wäre eine Compilerdirektive. Du könntest eine entsprechende Direktive ggf. in einer .inc Datei definieren:
Delphi-Quellcode:
{$define UseTestDir}
Und in der Unit dann:
Delphi-Quellcode:
{$I MyDefines.inc}

...

SaveFileName := AppDataDir + 'Autor\Programm' {$ifdef UseTestDir} + '\Test'{$endif} + 'FileName.ini';

Satty67 26. Mär 2009 22:00

Re: Zwischen Test- und Datenverzeichnis unterscheiden.
 
Ich gebe bei sowas einfach ENTWICKLUNG als Parameter in den Start-Optionen an (Start->Parameter).

Das frage ich dann ab mit:
Delphi-Quellcode:
If ParamStr(1) = 'ENTWICKLUNG' then begin

end else begin

end;
Wobei {$define... schöner aussieht und keinen doppelten Code in der EXE lässt. Gibt es eine Standard-Direktive, die von der IDE (nur in der IDE) gesetzt wird?

Die Muhkuh 26. Mär 2009 22:01

Re: Zwischen Test- und Datenverzeichnis unterscheiden.
 
Was sollte es bringen?

Wenn Du kompilierst wäre die Direktive ja existent, also wird auch der Code, der von dieser Direktive beeinflusst wird, in die Exe geschrieben.

Wenn Du die Exe danach außerhalb der IDE aufrufst, ist ja der Code trotzdem drin.

jaenicke 26. Mär 2009 22:03

Re: Zwischen Test- und Datenverzeichnis unterscheiden.
 
Richtig, in den Projektoptionen kann man ja auch die Direktiven setzen, das habe ich vergessen, dann braucht man gar keine extra Datei oder so.

Das geht über Projekt --> Optionen --> Verzeichnisse / Bedingungen, unten ist dafür ein Feld.

// EDIT:
Klar ist der Code drin, das soll er ja auch sein. Und in der echten Version wird vor dem Kompilieren die Direktive entfernt.

Satty67 26. Mär 2009 22:03

Re: Zwischen Test- und Datenverzeichnis unterscheiden.
 
@Die Muhkuh: Ok, Denkfehler. Da hatte ich wohl Debug und Release Compilierung im Kopf. Muss man dann halt von Hand umschalten.

Die Muhkuh 26. Mär 2009 22:04

Re: Zwischen Test- und Datenverzeichnis unterscheiden.
 
Darf man dann aber nicht vergessen, da finde ich es mit der Datei schneller ersichtlich.

Aber wie gesagt: Die Direktive beeinflusst den Code beim Kompilieren und nicht immer zur Laufzeit.

RaSoWa1 27. Mär 2009 08:09

Re: Zwischen Test- und Datenverzeichnis unterscheiden.
 
Danke an Alle.

Ich hatte auf eine automatische Lösung gehofft. Ich weis genau, dass ich die manuelle Umschaltung ab und zu mal vergessen werde.
Das kleinere Übel ist dann doch der Vorschlag aus meinem 1. Thread. Die zwei Code-Zeilen werde ich dann als Ballast mit herumschleppen. Das ist mir sicherer.

Gruß Klaus.


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:06 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz