Relative Pfadangabe in INI-Datei

Hallo,
ich habe in einer INI den Speicherort abgelegt. Mein Problem ist nun, wenn ich das Programm auf einer Externen HDD auf verschiedenen PC’s ausführen will, soll der Laufwerksbuchstabe angepasst werden.

Beispiele:
PC1: E:\Speicherort
PC2: H:\Speicherort (in der Inidatei soll aus E: nun H: werden)

Hi,

Hallo,
ich habe in einer INI den Speicherort abgelegt. Mein Problem
ist nun, wenn ich das Programm auf einer Externen HDD auf
verschiedenen PC’s ausführen will, soll der Laufwerksbuchstabe
angepasst werden.

Du beschreibst die Rahmenbedingungen noch nicht genau genug.

Denkbares Szenario: das Programm läuft auf der C: Platte, und braucht Daten, die sich auf der USB Platte befinden. Da sich der Laufwerksbuchstabe der USB Platte leicht ändern kann funktioniert das Programm nicht zuverlässig.

Einige Lösungsansätze:

  • checke mit DirectoryExists ob der Ordner, der derzeit in der ini Datei gespeichert ist, existiert. Wenn nicht, klapperst Du alle Laufwerksbuchstaben von D bis Z nach dem Ordner ab.

  • verpass der USB Festplatte ein signifikantes Label, und suche nach dem Label um den Laufwerksbuchstaben zu finden

  • merk Dir die Seriennummer der Festplatte, und suche nach der Seriennummer.

(1) ist leicht realisierbar, hat aber Pferdefüße, so führt das u.U. dazu, dass das CD Laufwerk hochdreht wenn eine CD drinnen liegt.

(2) und (3) bedingen, dass Du Dich programmiertechnisch mit der WMI Schnittstelle auseinandersetzt, was aber ohnehin sehr gut angelegte Zeit ist, wenn man eher systemnah programmieren möchte.

Armin.

Danke für die rasche Antwort!
Trotz meiner kurzen Beschreibung hast Du mir die richtigen Denkanstöße übermittelt.
Ich bin kein Profi, und mit der WMI habe ich wenig Erfahrung (klingt aber hoch interessant! - wo kann ich darüber mehr erfahren?), daher denke ich an folgenden Ablauf:
1-Beim Starten des Programms frage ich den Laufwerksbuchstaben der HDD ab auf der das Programm gestartet wurde.
2-Dann lese ich aus der INI-Dateien die Pfade aus und ändere den LW-Buchstaben der Pfadangaben (Programm und LW des Speicherorts sind immer ident!)und schreibe die Daten zurück.
Das Ganze bette ich in die Form.Create prozedur ein, bevor das Programm geöffnet wird.

PiPa

Hi PiPa,

den LW-Buchstaben der Pfadangaben (Programm und LW des
Speicherorts sind immer ident!)und schreibe die Daten zurück.

… dann gehts noch viel einfacher. Application.Exename bringt den Pfad der aufgerufenen exe Datei zurück, davon ziehst Du den Filenamen ab und übrig bleibt der gesuchte Pfad.

Zu WMI gibt es x Beschreibungen, Tante Google spuckt sie willigst aus. Der Aufruf aus Delphi ist allerdings etwas aufwändig. Für erste Schritte würde ich Dir die „WMI Scriptomatic“ empfehlen, das ist ein einfacher vbs Script den Du bei Microsoft runterladen kannst, und den jede Windows Maschine ab Windows XP sofort willigst ausführt. Damit kannst Du die verschiedenen WMI Objekte, die Dein Rechner so bereitstellt, auswerfen lassen. Wenn Du Dich gerne näher an den Computer ranprogrammieren möchtest werden Dir die Augen aufgehen. Angefangen von der Seriennummer bis zur Lüfterdrehzahl oder der Frage welches Speichermodul in welchem Speicherslot steckt oder wer den Bildschirm gebaut hat der angeschlossen ist kann man fast alles über WMI über simple Abfragen auswerfen lassen. Sich da reinzutigern lohnt sich, aber da der Aufruf von WMI aus Delphi heraus ein wenig aufwändig ist empfehle ich als Appetizer zuerst mal mit vbs die Möglichkeiten anzusehen, damit man entscheiden kann ob sich der Aufwand auch lohnt.

Außerdem wirst Du bald merken, dass Microsoft einen Teil der Arbeit, die WMI Daten zu einem COmputer bereitzustellen, an die hersteller delegiert hat, und die machen ihre Hausaufgaben manchmal besser, amnchmal schlechter. So kann man z.B. die Temperatursensoren und Lüfterdrehzahlen mancher Mainboards problemlos auslesen, bei Anderen muss man erst noch einen Treiber nachinstallieren, und wieder für Andere gibt es das einfach nicht, dann hat man Pech.

Armin.

Hallo Sam99, hallo Leute
Ich habe alle Sicherheitseinstellungen durchprobiert, aber ich kann das xlsm-File aus meinem Delphiprogramm nicht öffnen. Nun habe ich festgestellt, daß ich über den TaskManager folgendes gefunden habe: ein Dialogfenster „Namenskonflikt“ mit folgendem Inhalt: Name darf integriertem Namen nicht gleichen. Alter Name: Print_Area, Neuer Name: ein Eingabefeld.
Gebe ich in das Feld einen anderen Namen ein (z.B. Print_Area1) läßt sich das File öffnen.
Liebe Delphianer, wie kann ich diesen Namenskonflikt umgehen. In MS - Hilfe stand was von Einstellungen für den Zugriffschutz, aber auch wenn ich das mache funktionierts immer noch nicht!

Hat jemand eine Idee.

Danke!

Re^3 wurde hier falsch abgelegt Tschuldigung!!