Probleme mit VirtualStore in Vista

10/06/2008 - 10:57 von Jens Duttke | Report spam
Hallo,

Mein Text ist etwas lànger geworden als gedacht, ich denke aber alles ist
notwendig um das Problem nachvollziehen zu können.
Wer keine Lust hat den kompletten Text zu lesen, kann auch bis zum
vorletzten Abschnitt scrollen, dort steht meine eigentliche Frage.

Ich liefere zu meinem Programm ein Online-Aktualisierungs-Modul über das der
Anwender seine Installation ohne stàndige Neuinstallation sehr leicht
aktualisieren kann.
Bestandteil meines Programms sind u.a. auch Datenbanken im XML-Format die
nur gelesen werden, also keine Änderung des Benutzers bedürfen. Diese
befinden sich zusammen mit dem Programm selbst unter C:\Program files\

Da man für das Schreiben nach C:\Program files\ Administrator-Rechte
benötigt, startet das Update-Programm im Administrator-Modus und tauscht
dann die ausführbaren Dateien und die Datenbanken aus.

Soweit so gut.

Nun gibt es einige Benutzer, die aus verschiedenen Gründen die
XML-Datenbanken bearbeiten.
Da sie dies als "normale" Benutzer tun, speichert Windows Vista die Datei
nicht unter C:\Program files\ sondern im VirtualStore.
Da mein Hauptprogramm selbst auch mit normalen Benutzerrechten arbeitet,
ließt es entsprechend auch die geànderten Dateien aus dem VirtualStore.

Und da gehen nun die Probleme los.

Sobald der Benutzer eine Programm-Aktualisierung durchführt, werden zwar die
Dateien C:\Program files\ aktualisiert (weil das Aktualisierungsprogramm wie
gesagt Administratorrechte hat), die Dateien im VirtualStore bleiben aber
erhalten.

Wenn der Benutzer nun das Programm nach der Aktualisierung startet, hat er
die neue Programmversion, aber alte Datenbanken in seinem VirtualStore.
Teilweise sind die alten Datenbanken zur neuen Programmversion inkompatibel,
so dass dadurch bei der Verarbeitung der Daten Fehler auftreten.

Mein erster Gedanke war die Datenbanken ins Users-Verzeichnis des Anwenders
zu installieren, statt in Program files.
Da aber alle Benutzer auf die gleichen Datenbanken zugreifen sollen, und
diese Daten eigentlich für die Bearbeitung nicht vorgesehen sind, sind sie
denke ich besser unter Program files aufgehoben. Zudem wàre eine
Aktualisierung der Dateien nahezu unmöglich sein, da der
Administrator-Account eventuell nicht die Rechte hat auf alle
Benutzerverzeichnisse zuzugreifen und die Dateien zu aktualisieren.

Deshalb würde meine Lösung so aussehen:
1. Mein Programm erzwingt das Öffnen der Datei aus "Program files".
2. Mein Programm überprüft ob es im VirtualStore eine Kopie der Datei gibt.
3. Wenn 2. zutrifft zeigt das Programm eine entsprechende Meldung an, die
den Benutzer auf den Sachverhalt hinweist und Lösungsschritte vorschlàgt.

Das halte ich für die beste Lösung. Leider finde ich keine Möglichkeit
Windows zu zwingen, die XML-Dateien aus "Program files" statt aus dem
VirtualStore zu öffnen. Hat dafür jemand eine Idee?

Ich gehe davon aus, dass làsst sich mit VB6-Bordmitteln nicht realisieren,
deshalb wàre ich auch mit einer API-Lösung (z.B. mit CreateFile) zufrieden -
hauptsache es funktioniert.

Viele Grüße,
Jens
 

Lesen sie die antworten

#1 Jens Müller
10/06/2008 - 18:09 | Warnen spam
Hi Jens,

was spricht dagegen, dass dein mit Admin-Rechten gestartetes Programm in
VirtualStore nachschaut, ob XML-Dateien vorhanden sind und diese löscht?

Nun gibt es einige Benutzer, die aus verschiedenen Gründen die
XML-Datenbanken bearbeiten.



Wie machen sie diese Bearbeitung? Wenn es mit einem Programm von Dir ist,
kannst du dafür die Virtualisierung mit einem Manifest deaktivieren (im
Task-Manager wird angezeigt, welche Programm virtualisiert sind, welche
nicht) - in dem Fall gibt es eben einen Zugriffsfehler, wenn das Programm zu
schreiben versucht, statt dass der Zugriff umgelenkt wird und das Programm
denkt alles ist ok.

Grüße,
Jens

Ähnliche fragen