2010-01-04 4 views
8

Ich habe eine Anwendung in Delphi 2006 geschrieben, die in Windows XP funktionierte. 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 Datei- und Registrierungsvirtualisierungsprobleme in Windows Vista oder Windows 7."Wie kann ich mein Programm in Windows Vista und Windows 7 arbeiten lassen?

Das Ausführen der Anwendung mit Administratorrechten löst nur das Problem, aber das ist (denke ich) eine schreckliche Umgehung. 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.

+0

Was würden Sie unter Windows XP tun, wenn der Benutzer ein Standardbenutzer ist? –

Antwort

12

Für Vista/Win7 kann Ihre App die Dateien nicht in einem Unterordner von Programme/Programme ablegen, es sei denn, die Benutzerkontensteuerung ist ausgeschaltet oder die App läuft als hoch. 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 die UAC konfiguriert ist. Keiner hilft der App dabei, das zu erreichen, was sie versucht hat zu od.

Also muss es sie woanders hinlegen. Das hängt davon ab, warum die Dateien erstellt werden, und Sie haben uns das nicht gesagt. Sie können this article 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 this article and screencast anschauen, in der die UAC aus der Sicht von Delphi ausführlich behandelt wird.

13

Sie müssen Ihre Anwendung neu schreiben, um ihre Dateien an den richtigen Stellen zu speichern, auch in XP, aber besonders in Vista, besonders 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 auf MSDN dokumentiert, zum Beispiel: "Application Specification for Microsoft Windows 2000 for Desktop Applications, Chapter 4: Data and Settings Management" und "Application Specification for Microsoft Windows 2000 for Desktop Applications Appendix 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.

4

Dateien, die Sie zur Verwendung durch Ihre Anwendung außerhalb der Installationszeit erstellen, sollten in das Verzeichnis ProgramData aufgenommen werden, wenn es auf der Arbeitsstation global ist oder in das anwenderspezifische Anwendungsdatenverzeichnis.

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. This is discussed in great detail und delphi specific bits are also available. 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 überdenken, um mehr Benutzer zu steuern.

2

Ich hatte eine ähnliche Anfrage here (Stack Overflow).

Am Ende stellte ich fest, dass ich meine Anwendung in Programmdateien zur Installationszeit setzen musste (UAC/Elevation erforderlich) und dann die Daten meiner App im Ordner App Data des Benutzers speichern. 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 zur Installationszeit, was für mich Sinn macht (und Sie erhalten 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 angeschaut, wenn dies der Fall gewesen wäre.

Die Installationssoftware, die wir verwenden (Setup Factory), machte dies ziemlich einfach (wir haben nur ein kleines bisschen 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, aus der begrenzten Erfahrung, die ich davon habe.

Verwandte Themen