Jump to content


This is a ready-only archive of the InstallSite Forum. You cannot post any new content here. / Dies ist ein Archiv des InstallSite Forums. Hier können keine neuen Beiträge veröffentlicht werden.
Photo

Windows - Datei bearbeiten


1 reply to this topic

VolkerJ

VolkerJ
  • Members
  • 1 posts

Posted 19 March 2004 - 17:07

Hallo,

ich habe ein großes Problem mit dem DevStudio 9.
Bei der Installation unserer Software müssen wir einen Eintrag in die Datei
c:\winnt\system32\drivers\etc\sevices
vornehmen , da unsere datebank über tcp 3050 connected , muss hier der Eintrag rein:
gds_db 3050/tcp

Kann mir jemand helfen, wie ich dies realisieren kann ?

Gruss
Volker

hteichert

hteichert
  • Members
  • 158 posts

Posted 23 March 2004 - 11:01

Als erstes gilt es zu bedenken, dass die Software auch wieder deinstalliert werden kann: hier gilt es dann, den Eintrag auch wieder zu entfernen. Letztlich braucht es also zwei Aktionen: Schreiben des Eintrags und Löschen des Eintrags.
Das Wort "Aktionen" legt die Vorgehensweise schon nahe. Ich würde zwei CustomActions schreiben, eine zum Eintragen, die andere zum Entfernen des Protokolls aus "services". Der Einfachheit halber (da braucht es keinen Compiler als auch keine sonstigen Extras wie InstallScript) nehme ich für solche Zwecke VBScript.

Mit Hilfe des "FileSystemObject" kann man unter VBScript (oder auch JScript) eine Textdatei öffnen, zeilenweise einlesen und als eine zweite Datei wieder rausschreiben. Sobald bei diesem Kopierprozess die erste Zeile gefunden wird, in der die Protokollnummer höher ist als die neu zu schreibende (in deinem Fall 3050/tcp) wird erst mal das eigene Protokoll als neue Zeile geschrieben und anschließend der Rest des Kopierprozesses fortgesetzt. Zu guter letzt noch Umkopieren der neu erstellten Datei in "services" (mittels der "CopyFile" Methode des FileSystemObjects).

Entsprechend braucht es für das Entfernen des Protokolls eine entsprechende VBScript Funktion, die ebenfalls zeilenweise kopiert, aber die Zeile, die das zu entfernende Protokoll enthält, einfach wegwirft.
Diese beiden Aktionen würde ich als Deferred CustomAction laufen lassen. Wichtig wäre noch, sich auch über eventuelle Rollbacks Gedanken zu machen (hierbei läßt sich dann das Löschen als Rollback für die Installation einsetzen).

Letztlich ergeben sich drei CAs:
1) UnInstallProtokoll (Deferred CA, nutzt die VBScript Funktion die das Protokoll löscht)
2) RBInstallProtokoll (Rollback CA, nutzt die VBScript Funktion die das Protokoll löscht)
3) InstallProtokoll (Deferred CA, nutzt die VBScript Funktion die das Protokoll einträgt)
Dann müssen die drei CAs noch in die InstallExecuteSequence eingetragen werden.
UnInstallProtokoll so etwa bei "RemoveFiles"; Condition setzen, dass die CA nur beim DeInstallieren ausgeführt wird (z.B. REMOVE=ALL)
RBInstallProtokoll und InstallProtokoll so etwa bei "InstallFiles"; Condition setzen, dass die CAs nur beim Installieren ausgeführt werden (z.B. Not Installed)

Und dann sollte man auch noch bedenken, dass Windows nicht immer in "c:\winnt" installiert ist und das Ganze natürlich nur für NT und Nachfolger (2000, XP, 2003) funktioniert. Die ganze 9x-Familie (95, 98, ME) ist im Netzwerkbereich etwas anders. Zum einen liegen da die Dateien an anderer Stelle und dann werden diese Dateien nur beim Booten eingelesen.
h.teichert-ott