Ich habe ein Problem mit dem VirtualStore von Vista...
Wir entwickeln eine Software für Windows. Diese wird installiert und geht
auch wunderbar bis zu dem Tage an dem ein Update eingespielt werden soll.
Bisher geschah dies über ein Tool von uns, die sogenannte
Versionsverwaltung. Diese entfernt die alte Programmdatei und kopiert die
neue Version. Sehr ähnlich einer einfach BAT-Datei, die einfach nur nen DEL
und nen COPY macht.
Und nun kommt der VirtualStore:
ich kopiere diese neue Datei idR. nach C:\Programme\Unsere Software\Bin und
dort landet die neue Version auch...
aber starte ich danach das Programm ist immernoch die alte Version aktiv, da
sich Vista diese aus dem VirtualStore zieht.
Wie kann ich das umgehen? Kann ich Vista-weit bestimmen, dass unser Programm
vom VirtualStore unbeachtet bleiben soll?!
Ich könnte zwar in meiner Versionsverwaltung (oder in ner BAT) die Datei
auch aus dem VirtualStore löschen - dann gehts - aber das wäre keine Lösung
sondern ein Umgehen des Problems. Bzw. ist dies keine Lösung des Problems,
wenn mehrere Nutzer an dem PC arbeiten! Hierbei bekommt jeder einzelne User
seinen eigenen VirtualStore! Ich müsste also alle VirtualStores von allen
Usern löschen (auf die ich dann wiederum keinen Zugriff habe)
Ich bin gespannt, welche Tipps ihr habt!
Thomas
Thomas Raasch schrieb:
> Ich bin gespannt, welche Tipps ihr habt!
Informiere dich bitte über UAC (=Benutzerkontensteuerung).
Kurze Erklärung des Problems:
Unter <Windows Vista wird euer Programm soweit arbeiten, da hier die
Anwender meistens Administratoren waren und somit nach %programfiles%
schreiben konnten.
Unter Windows Vista sind selbst Mitglieder der Gruppe "Administratoren"
standardmäßig nur Benutzer. Somit läuft die Anwendung auch nur mit diesen
Rechten und kann eben *nicht* nach %programfiles% schreiben.
Damit deine Anwendung daran nicht direkt scheitert, wird der Zugriff
virtualisiert - du denkst "Hat alles gekappt" ;)
Lösung:
Führe die Update-Anwendung explizit als Administrator aus (Rechtsklick ->
Ausführen als...; Bei Skripten evtl. aus einer administrativen
Eingabeaufforderung starten).
Wie gesagt:
Informiere dich über UAC - gerade als Entwickler.
Auch solltest du dir Gedanken machen ob es nicht Zeit wäre, die
Installations-/Updateroutinen auf Windows Installer Basis zu bauen...
--
Grüße,
Thomas
Hi,
ja das Problem und UAC usw. ist ja bekannt... man kann nicht mehr nach
%Programfiles% schreiben
Die Frage bleibt: wie umgeht man das?
Hier 5 Ansätze:
1)
Eine Möglichkeit wäre tatsächlich der Einsatz des Windows-Installers -
richtig, aber:
- Lizenzkosten!?
- für ein Update von 200 KB muss ich dann immer ein komplettes
Installerpaket versenden
- intern "umgeht" der Windows-Installer auch nur dieses Problem, indem er
einfach nur den VirtualStore aller Nutzer löscht.... toll
- meine Versionsverwaltung ist dahin (es ist auch notwendig mal auf eine
alte Version zu downgraden!)
2)
Meine Idee wäre gewesen, dass ich mein Programm auszeichnen kann als "gutes
Programm" welches einfach nicht mehr im VirtualStore gespeichert wird.
Funktionieren muss sowas, da es viele Windows-Programme so machen - aber
wie???
3)
Ich hab etwas vom TrustInfo Manifest gehört, bin mir aber nicht sicher ob
dies das Problem löst und vor allem glaube ich, dass dann bei jedem Start
der Anwendung eine Benutzerbestätigung kommt - der Desktop also abdunkelt
und man auf Fortsetzen klicken muss. Absolut inakzeptabel.
4)
UAC abschalten wäre eine weitere Möglichkeit (wenn ich mich nicht irre) -
aber davon möchte ich natürlich absehen.
5)
Eine weitere Möglichkeit (ich kam noch nicht zum Testen) soll sein, dass ich
meine Anwendung einfach unter C:\MyApp installiere und nicht unter
C:\Program Files\MyApp da eben nur %Programfiles% (und Windows-Ordner)
geschützt ist.... Wenn das gehen sollte stellt sich mir aber die Sinnfrage
des ganzen VirtualStores, da dann einfach niemand mehr nach C:\Program Files
installiert und gut ist.
Bzw. was passiert wenn ich die Umgebungsvariable %programfiles% umleite nach
C:\Testordner - hab ich dann plötzlich Zugriff auf C.\Program Files?
Aber diesen Punkt muss ich erst noch austesten
btw. Es handelt sich um ein Access-Front-End. D.h. allein beim Start der
Anwendung wird die Programm-Datei verändert (ohne das tatsächlich was getan
wird) und schwups gehts ab in den VStore.
Grüße zurück :)
Thomas
"Thomas Raasch" <nos...@nospam.com> wrote in message:
> Eine Möglichkeit wäre tatsächlich der Einsatz des Windows-Installers -
> richtig, aber:
> - Lizenzkosten!?
Nimm z.B. den Visual Studio Installer. Es gibt aber auch andere Produkte die
MSIs erstellen können und kostenfrei sind, bzw. für wenig Geld zu haben
sind.
> - für ein Update von 200 KB muss ich dann immer ein komplettes
> Installerpaket versenden
Nö. MSI bietet Dir auch Patchingmöglichkeiten. Da kannst Du aus Deinen 200KB
auch grad nochmal 20KB mit machen, weil nur die geänderten Dateihäppchen
ausgetauscht werden ;-)
> - intern "umgeht" der Windows-Installer auch nur dieses Problem, indem er
> einfach nur den VirtualStore aller Nutzer löscht.... toll
Bei einer sauberen Installer / Anwendungsarchitektur sollte der VirtualStore
überhaupt nicht verwendet werden.
> - meine Versionsverwaltung ist dahin (es ist auch notwendig mal auf eine
> alte Version zu downgraden!)
Kein Thema: MSI-Patches sind auf Wunsch auch deinstallierbar...
> Meine Idee wäre gewesen, dass ich mein Programm auszeichnen kann als
> "gutes Programm" welches einfach nicht mehr im VirtualStore gespeichert
> wird. Funktionieren muss sowas, da es viele Windows-Programme so machen -
> aber wie???
Hast Du hierfür ein Beispiel??? Ich kenne keines?!
> Ich hab etwas vom TrustInfo Manifest gehört, bin mir aber nicht sicher ob
> dies das Problem löst und vor allem glaube ich, dass dann bei jedem Start
> der Anwendung eine Benutzerbestätigung kommt - der Desktop also abdunkelt
> und man auf Fortsetzen klicken muss. Absolut inakzeptabel.
Das Manifest löst nur eine Heraufstufung durch die UAC aus bzw. nagelt dich
permanent auf bestimmte Rechte fest. In Hinblick auf eine evtl.
MS-Zertifizierung Deiner Anwendung ist ein solches Assembly-Manifest in
jedem Falle von nöten, ebenso wie eine Signatur Deiner Assembly/ies (sonst
sieht der Requester der UAC bescheiden aus und ist für den User weniger
vertrauenswürdig).
> UAC abschalten wäre eine weitere Möglichkeit (wenn ich mich nicht irre) -
> aber davon möchte ich natürlich absehen.
Dazu spare ich mir einen Kommentar...!
> Eine weitere Möglichkeit (ich kam noch nicht zum Testen) soll sein, dass
> ich meine Anwendung einfach unter C:\MyApp installiere und nicht unter
> C:\Program Files\MyApp da eben nur %Programfiles% (und Windows-Ordner)
> geschützt ist.... Wenn das gehen sollte stellt sich mir aber die Sinnfrage
> des ganzen VirtualStores, da dann einfach niemand mehr nach C:\Program
> Files installiert und gut ist.
Und schön an den Guidelines vorbei ;-) Der Kunde wird es danken...
> Bzw. was passiert wenn ich die Umgebungsvariable %programfiles% umleite
> nach C:\Testordner - hab ich dann plötzlich Zugriff auf C.\Program Files?
> Aber diesen Punkt muss ich erst noch austesten
Und was ist mit anderen Anwendungen? Die finden sich plötzlich nicht mehr
wieder! Oder willst Du %PROGRAMFILES% komplett nach C:\Testordner kopieren?
> btw. Es handelt sich um ein Access-Front-End. D.h. allein beim Start der
> Anwendung wird die Programm-Datei verändert (ohne das tatsächlich was
> getan wird) und schwups gehts ab in den VStore.
Aaaaaaaah! Da liegt der Hund begraben... Warum hälst Du nicht ein
Starter-Tool bereit, dass die MDB / MDE z.B. nach %TEMP% kopiert oder in den
Anwendungsdaten des Users ablegt?
Grüße
Sebastian
--
Wissen ist Macht - nichts wissen macht auch nichts!
> ja das Problem und UAC usw. ist ja bekannt... man kann nicht mehr nach
> %Programfiles% schreiben
> Die Frage bleibt: wie umgeht man das?
Also aus Administrator-Sicht würde ich mich freuen wenn man langsam die
Daten dorthin ablegt wo sie seit Jahren eigentlich hingehören. In den
Benutzer-Ordner und nicht irgendwo im Filesystem wo grad Platz ist.
Gruß
Marcel
> Also aus Administrator-Sicht würde ich mich freuen wenn man langsam die
> Daten dorthin ablegt wo sie seit Jahren eigentlich hingehören. In den
> Benutzer-Ordner und nicht irgendwo im Filesystem wo grad Platz ist.
Es geht hier nicht um Daten, sondern um die Programmdatei.
--
<http://schneegans.de/usenet/mid-schreibweisen/> · Postings verlinken
"Christoph Schneegans" <Chri...@Schneegans.de> wrote in message:
> Es geht hier nicht um Daten, sondern um die Programmdatei.
Mmmh. Sagtest Du nicht etwas von Access-Frondend? Ich gehe doch in diesem
Falle stark von einer mdb/mde aus?! Access-Datenbanken werden nunmal von
Access beim Öffnen verändert. Genau deswegen habe ich Dir in meiner anderen
Antwort dafür Lösungswege genannt. Wenn ich mit mde/mdb recht habe, wird es
IMHO ohnehin nichts mit dem Manifest. Zumal dieses i.d.R. in die Resource
der Assembly einkompiliert und nicht "danebengelegt" gehört. Und wenn ich
richtig liege, dann mag es zwar sein, dass es sich um eine geskriptete
Datenbank handelt, aber es wäre dennoch eine Datenbank und gehört damit in
die Userdaten.
Jedes *echte Kompilat*, das sich selber verändert, fällt für mich ohnehin
primär in die Kategorie Malware ;-) So etwas würde ich mir niemals
freiwillig installieren.
HTH
das ist doch mal ne Idee.... kreativ und einfach simpel...
Ich werde dies erproben
Grüße
Thomas
"Thomas Raasch" <nos...@nospam.com> wrote in message:
> das ist doch mal ne Idee.... kreativ und einfach simpel...
> Ich werde dies erproben
Freut mich, wenn ich helfen konnte. :-)