| Autor |
Beitrag |
Jens Hartmann
      
Beiträge: 120
XP
Delphi
|
Verfasst: Fr 23.01.09 17:55
Hallo zusammen,
Ich habe mal eine kleine Frage zum schreiben von Dateien. Ich habe für meine Software ein Programm geschrieben, mit der ich für jeden Kunden eine Lizenzdatei und Kundendatendatei erstelle. Diese beiden Dateien werden bei Auslieferung von meinem Programm mitgeliefert und durch die Software abgefragt. Daher habe ich in meiner Software einmal realisiert, das sie Lizenziert ist und außerdem die Kundenspezifischen Daten in die Registry geschrieben werden.
Damit ich jetzt alle Kundendaten sauber sortiert Speichern kann, wird beim Erstellen ein Matchcode als Dateiname zugefügt.
Wie kann ich es jetzt realiseren, die Daten auf gleicher Eben wie der Prgrammordner abzuspeichern.
Was heißt, das ich meinen Programmordner nochmal unterteil habe in die Ordener Prg, DB und Liz.
z.B.
C:\Programme\LizMaker\Prg\Lizmaker.exe
C:\Programme\LizMaker\DB\Kunden.mdb
C:\Programme\LizMaker\Liz\H\Hartmann Jens.liz
C:\Programme\LizMaker\Liz\H\Daten Hartmann Jens.ini
Um das schreiben in den Programmordener zu realisieren, nutze ich momentan
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14:
| Kundendaten := TIniFile.Create('.\Liz\'+Matchcode+' Kundendaten.Ini'); with Kundendaten do begin WriteString('Kunde', 'Kunde', Kundenname); WriteString('Kunde', 'Objekt', Objekt+#13#10); WriteString('Standort', 'Anschrift', Straße+' '+Hausnummer); WriteString('Standort', 'Wohnort', PLZ+' '+Ort+#13#10); WriteString('Kontakt', 'Tel', Tel); WriteString('Kontakt', 'Fax', Fax); WriteString('Kontakt', 'E-Mail', EMail+#13#10); WriteString('Software', 'Version', Version); WriteString('Software', 'Seriennummer', Seriennummer); WriteString('Software', 'Lizenznummer', Lizenznummer); end; Kundendaten.Free; |
Jetzt ist halt die Frage wie bekomme ich die Datei einen Ordner höher und dann nach LIZ\H oder so.
MFG
Jens 
|
|
jaenicke
      
Beiträge: 19346
Erhaltene Danke: 1754
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Fr 23.01.09 18:17
Das funktioniert so aber nicht immer, ohne absoluten Pfad ist das ein Glücksspiel:
www.delphi-library.d...ewtopic.php?p=499701
Und zu deinem Problem gibt es hier einen Beitrag:
www.delphi-library.d...ewtopic.php?p=166588
oder eine einfache Funktion:
msdn.microsoft.com/e...ibrary/bb773571.aspx
|
|
Jens Hartmann 
      
Beiträge: 120
XP
Delphi
|
Verfasst: Mo 26.01.09 20:52
Danke,
Hat alles wunderbar funktionoiert. Habe mein Datei jetzt da wo ich Sie brauche!
MFG
Jens 
|
|
BenBE
      
Beiträge: 8721
Erhaltene Danke: 191
Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
|
Verfasst: Di 27.01.09 03:49
Wobei Benutzerkonfigurationen und andere Daten, die nach der Installation angelegt werden, NICHT IN DAS PROGRAMMVERZEICHNIS gehören! Punkt.
Spätestens unter Windows XP, garantiert aber mit Vista, fliegt dir das um die Ohren!
_________________ Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
|
|
delfiphan
      
Beiträge: 2684
Erhaltene Danke: 32
|
Verfasst: Di 27.01.09 07:25
BenBE hat folgendes geschrieben : | | garantiert aber mit Vista, fliegt dir das um die Ohren! |
Nicht unbedingt  Denn Vista hat einen Kompatibilitätsmodus, wo der Programmordner ggf. umgeleitet wird. (Nicht, dass ich das empfehle!)
|
|
Jens Hartmann 
      
Beiträge: 120
XP
Delphi
|
Verfasst: Di 27.01.09 13:36
Das mit dem Windows Vista und so, ist mir schon des öfteren hier aufgefallen,
Bei dem Programm hier, ist das egal, weil ich das auf meinem XP-Rechner habe und es nur zum Lizenzdateiem ertstellen nutzte.
Aber trotzallem, ich will mich ja belehren lassen, wie und wo speichert man denn dann heute Lizenzdaten und Eigenschaften von Programmen ?
MFG
Jens
|
|
DeddyH
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Di 27.01.09 14:00
Das gehört in den Ordner Anwendungsdaten, zu finden z.B. mit SHGetFolderPath und CSIDL_APPDATA bzw. CSIDL_COMMON_APPDATA.
[edit] Natürlich in einen anzulegenden Unterordner davon  [/edit]
Zuletzt bearbeitet von DeddyH am Di 27.01.09 14:06, insgesamt 1-mal bearbeitet
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Di 27.01.09 14:03
Man legt einen Unterordner für sein Programm in dem Ordner an der durch SHGetSpecialFolderLocation mit der ID CSIDL_APPDATA zurückgegeben wird:
| Zitat: | | CSIDL_APPDATA (FOLDERID_RoamingAppData): The file system directory that serves as a common repository for application-specific data. |
Oder wenn es nicht benutzer spezifisch ist:
| Zitat: | CSIDL_COMMON_APPDATA (FOLDERID_ProgramData)
Version 5.0. The file system directory that contains application data for all users. A typical path is C:\Documents and Settings\All Users\Application Data. This folder is used for application data that is not user specific. For example, an application can store a spell-check dictionary, a database of clip art, or a log file in the CSIDL_COMMON_APPDATA folder. This information will not roam and is available to anyone using the computer. |
|
|
Jens Hartmann 
      
Beiträge: 120
XP
Delphi
|
Verfasst: Di 27.01.09 15:10
In welchem Unit sind den diese Möglichkeiten gegeben, oder wie erreiche ich es den Pfad abzufragen.
Habe jetzt mal ein bißchen probiert, aber leider ohne Erfolg.
Hat vieleicht jemand mal ein Beispiel (nicht die Lösung in Delphi), sondern nur wie das Verzeichnis und der Aufbau auszusehen hat.
Ich will das schon gerne selber lösen.
MFG
Jens
|
|
Nersgatt
      
Beiträge: 1581
Erhaltene Danke: 279
Delphi 10 Seattle Prof.
|
Verfasst: Di 27.01.09 15:15
_________________ Gruß, Jens
Zuerst ignorieren sie dich, dann lachen sie über dich, dann bekämpfen sie dich und dann gewinnst du. (Mahatma Gandhi)
|
|
jaenicke
      
Beiträge: 19346
Erhaltene Danke: 1754
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Di 27.01.09 16:09
|
|
Jens Hartmann 
      
Beiträge: 120
XP
Delphi
|
Verfasst: Mi 28.01.09 18:40
Hallo Sebastian,
Sorry erstmal, das ich deinen Beitrag oben nicht genau gelesen habe.
Erstmal muss ich Dir ein ganz großes Lob aussprechen, da der Beitrag zwar kurz, aber dafür vollkommend ausreichend und verständlich ist.
Jetzt habe ich allerdings noch zwei fragen.
1: Ich nutze für mein Programm eine Lizenzdatei, aus der ich nur die Lizenzinformationen entnehme. Wenn ich das alles richtig verstanden habe, kann diese aber im Programmverzeichnis liegen, da ich dort nur Daten lese und somit ja keine Schreibrechte benötige.
2. Außerdem benutzt ich eine INI-Datei für meine User-Einstellungen, die allerdings bei allen Usern gleich sein soll, da es Programmeinstellungen sind, in der gewisse Funktionen gespeichert werden.
Meine Lösung dazu wäre, diese in
In der Registry unter HKEY_LOCAL_MACHINE\Software\Hersteller\Softwarename\Version (Also nicht mehr INIDatei)
oder
C:\Dokumente und Einstellungen\All Users\Anwendungsdaten (Weiterhin INI Datei)
zu speichern.
Bin ich auf dem richtigen Weg, oder soll ich das ganze anders angehen.
MFG
Jens
|
|
Jens Hartmann 
      
Beiträge: 120
XP
Delphi
|
Verfasst: Mi 28.01.09 18:50
Hab jetzt z.B. das ganz mal in mein Programm integriert und da kommt bei folgendem Quelltext,
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29:
| Function GetSpecialFolder (aFolder: Integer): String; var pIdL: PItemIDList; Path: Array [0..Max_Path] Of Char; Allocator: IMalloc; Begin SHGetSpecialFolderLocation (0, aFolder, pIdL);
SHGetPathFromIDList (pIDL, Path);
If Succeeded (SHGetMalloc (Allocator)) Then Begin Allocator.Free (pIdL); {$IFDEF VER100} Allocator.Release; {$ENDIF} End; Speicherort := Path; Result := Path; End;
procedure TForm1.Button1Click(Sender: TObject); begin GetSpecialFolder(0); Memo.Text := Speicherort; end; |
folgender Rückgabewert raus...
[highlight]
C:\Dokumente und Einstellungen\user\Desktop[/highlight]
Ich persönlich finde diesen Rückgabewert, jetzt sehr seltsam. wie komme ich denn auf den richtigen Pfad.
MFG
Jens
|
|
BenBE
      
Beiträge: 8721
Erhaltene Danke: 191
Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
|
Verfasst: Mi 28.01.09 18:54
Du musst bei GetSpecialFolder die korrekte ID übergeben.
_________________ Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
|
|
DeddyH
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Mi 28.01.09 18:55
Verwende statt der 0 die vordefinierten CSIDL_*-Konstanten. Für die Anwendungsdaten sind das wie erwähnt CSIDL_APPDATA bzw. CSIDL_COMMON_APPDATA.
|
|
Jens Hartmann 
      
Beiträge: 120
XP
Delphi
|
Verfasst: Mi 28.01.09 19:05
Danke zusammen, Funktioniert so.
Sorry, aber mein Problem ist dabei im das ENGLISCH.
Wie sieht es aus mit meiner Lzenzdatei. Ist das so in Ordnung.
Habe das jetzt alles soweit hinbekommen und speicher meine Daten jetzt unter
C:\Dokumente und Einstellungen\All Users\Anwendungsdaten
Jetzt habe ich nur ein Problem, und das habe ich noch nie verstanden. Warum finde ich diese INI datei nicht in dem Verzeichnis.
Aber mein Programm nutzt diese.
Den Ordner Anwendungsdaten sehe ich gar nicht.
Bin ich doof oder so.
MFG
Jens
|
|
jaenicke
      
Beiträge: 19346
Erhaltene Danke: 1754
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Mi 28.01.09 19:41
Jens Hartmann hat folgendes geschrieben : | | Wie sieht es aus mit meiner Lzenzdatei. Ist das so in Ordnung. |
Ja, sicher, alles was nur zum Lesen ist, das kann ruhig im Ordner der Anwendung mitgeliefert werden. Es ist aber auch nicht falsch das ebenfalls in die Anwendungsdaten zu legen.
Viele Programme legen dort auch solche Daten ab um sie nach einem Update vielleicht doch einmal verändern zu können o.ä.
Jens Hartmann hat folgendes geschrieben : | | Jetzt habe ich nur ein Problem, und das habe ich noch nie verstanden. Warum finde ich diese INI datei nicht in dem Verzeichnis. |
Du solltest dort in den Anwendungsdaten noch einen Unterordner anlegen, damit man weiß zu welchem Programm die Datei gehört. Typisch wäre zuerst dein Name oder der Firmenname und noch ein Unterordner mit dem Produktnamen. So habe ich das ja auch gemacht, und mit ForceDirectories sichergestellt, dass dieses Verzeichnis auch existiert.
Jens Hartmann hat folgendes geschrieben : | | Den Ordner Anwendungsdaten sehe ich gar nicht. |
Windows Explorer --> Ordneroptionen --> Ansicht...
Dort gibt es dann "Geschützte Systemdateien ausblenden" und unter "Versteckte Dateien und Ordner" --> "Alle Dateien und Ordner anzeigen".
Nur mit diesen Einstellungen siehst du wirklich alles. Auf einem PC zur Softwareentwicklung ist es durchaus ratsam zumindest versteckte Dateien einzublenden. 
|
|
Jens Hartmann 
      
Beiträge: 120
XP
Delphi
|
Verfasst: Mi 28.01.09 21:08
Ich danke Euch allen für die super geiler Hilfe.
MFG
Jens
|
|
|