Ich habe eine in Delphi 2006 geschriebene Anwendung, die in Windows XP gut funktioniert. Ich habe die Anwendung mit Inno Setup gepackt und dabei Programmdateien als Standardordner verwendet. Einige Benutzer migrierten zu Windows Vista und Windows 7. Das Problem hierbei ist, dass die Anwendung einige Dateien in ihrem eigenen Installationsordner erstellt. Dies funktionierte in XP, aber in Windows Vista hatten die Benutzer Probleme mit den erstellten Dateien (sie erscheinen nicht und so weiter). Nach der Untersuchung der Benutzerberichte entdeckte ich KB 927387 : "Häufige Probleme bei der Datei- und Registrierungvirtualisierung in Windows Vista oder Windows 7. "
Das Ausführen der Anwendung mit Administratorrechten löst nur das Problem, aber das ist (denke ich) eine schreckliche Umgehungslösung. Ich würde gerne wissen, ob es Richtlinien oder Tipps gibt, um die Anwendung mit Vista und 7 kompatibel zu machen, weil mehr Benutzer bald auf diese Betriebssysteme migrieren werden.
Für Vista / Win7 kann Ihre App die Dateien nicht in einen Unterordner von "Programme / Programme" stellen, es sei denn, die Benutzerkontensteuerung ist deaktiviert oder die Anwendung wird als "hoch" ausgeführt. Beachten Sie, dass "erhöht" nicht unbedingt "als Administrator angemeldet" bedeutet. Nicht-Administrator-Benutzer können erhöhen, und Administrator ist nicht unbedingt erhöht.
Wenn die App versucht, in Programmdateien zu schreiben, aber nicht erhöht wird, blockiert das Betriebssystem die Anwendung entweder oder "virtualisiert" den Schreibvorgang (die Dateien werden woanders abgelegt), je nachdem, wie UAC konfiguriert ist. Keiner hilft der App, das zu erreichen, was sie versucht hat zu od.
Es muss also woanders hingebracht werden. Das hängt davon ab, warum die Dateien erstellt werden, und Sie haben uns das nicht gesagt. Sie können diesen Artikel lesen, um mehr über die Optionen zu erfahren. Beachten Sie, dass zusätzlich zu den Ordnern AppData und Roaming des Benutzers auch ein Profil "Alle Benutzer" (freigegeben) vorhanden ist.
Sie sollten sich wahrscheinlich ansehen, die behandelt UAC aus der Sicht von Delphi.
Sie müssen Ihre Anwendung neu schreiben, um ihre Dateien an den richtigen Stellen zu speichern, auch in XP, aber besonders ab Vista, insbesondere wenn UAC aktiviert ist. Dies wird immer wichtiger, wenn Microsoft mit jeder neuen Betriebssystemversion seine Sicherheitsmodelle festlegt und durchsetzt. Die Regeln für die ordnungsgemäße Verwaltung von anwendungs- und benutzerbezogenen Dateien sind in MSDN dokumentiert, zum Beispiel: "Application Spezifikation für Microsoft Windows 2000 für Desktop-Anwendungen, Kapitel 4: Daten- und Einstellungsverwaltung " und " Anwendung Spezifikation für Microsoft Windows 2000 für Desktop-Anwendungen Anhang A: Best Practices " (Ja, sie sind alt, aber immer noch ziemlich relevant). Sehen Sie sich SHGetSpecialFolderLocation (), SHGetFolderPath (), SHGetKnownFolderPath () und andere verwandte Funktionen an, um Ihnen zu helfen.
Dateien, die Sie zur Verwendung durch Ihre Anwendung erstellen, außer zum Zeitpunkt der Installation, sollten in das Verzeichnis ProgramData gehen, wenn es global auf der Arbeitsstation oder im Verzeichnis ApplicationData des Benutzers ist, wenn es für den Benutzer spezifisch ist.
In Fällen, in denen Sie unbedingt eine Datei im Verzeichnis der Programmdateien ablegen müssen, können Sie mit com eine Erhöhung anfordern. Dies wird ausführlich besprochen , und delphi-spezifische Bits sind ebenfalls verfügbar . Ein Beispiel, das ich verwendet habe, besteht darin, die Installationsbasis meiner Benutzer zu patchen. Sie werden von der Benutzerkontensteuerung gewarnt, dass das System Änderungen vornehmen muss. Wenn Sie dies als eine automatisierte Aufgabe ausführen, müssen Sie möglicherweise die Logik neu überdenken, um mehr Benutzer zu sein.
Hier ist ein weiterer Artikel von Zarko Gajic, der zeigt, wie man verschiedene Systemverzeichnisse findet . Siehe auch diese verwandte Frage .
Ich hatte eine ähnliche Anfrage hier (Stapelüberlauf).
Am Ende wurde mir klar, dass ich meine Anwendung zur Installationszeit in Programmdateien legen musste (UAC / Elevation erforderlich) und dann die Daten meiner App im Ordner "App Data" des Benutzers speichern musste. Ich musste die Art und Weise ändern, wie mein Programm die Standardkonfigurationseinstellungen erzeugte und wo ich diese Daten speicherte, aber am Ende war es die Mühe wert - am Ende haben wir etwas installiert, das auf XP, Vista und Windows 7 läuft .
Der einzige UAC-Hit, den wir bekommen, ist die Installationszeit, was für mich sinnvoll ist (und Sie bekommen einen ähnlichen Treffer zur Installationszeit auf dem Mac). Wir hatten keine Daten, die allen Benutzern in diesem speziellen Fall gemeinsam wären, aber ich hätte mir den speziellen Ordner Programmdaten angesehen, wenn das der Fall gewesen wäre.
Die Installationssoftware, die wir verwenden (Setup Factory), hat dies ziemlich einfach gemacht (wir haben nur ein wenig Code geschrieben, um XP im Vergleich zu Vista / Win7 zu erkennen und den richtigen speziellen Ordner entsprechend auszuwählen). Es wäre leicht, dies auch im Inno-Setup zu tun, von der begrenzten Erfahrung, die ich davon habe.
Tags und Links windows-7 windows delphi windows-vista