2010-12-19 6 views
6

Ich weiß, dass commonappdata (alle Benutzer) können systemweite Anwendungseinstellungen halten, aber unter Vista/7 nicht erhöhte Benutzer können nicht in dieses Verzeichnis schreiben.Gibt es einen freigegebenen Ordner in Windows, auf den nicht erhöhte Benutzer Schreibzugriff haben?

Gibt es einen Ordner, der unter den Benutzern geteilt wird und jeder Nicht-Admin-Benutzer kann dazu schreiben?

Hier ist, warum ich das brauche: Meine App ist im PF-Verzeichnis von einem Inno Setup-Installer mit erhöhten Rechten installiert. Wenn der Benutzer, der kein Administrator ist, das Programm ausführt, kopiert er seine Einstellungen in das AppData-Verzeichnis des Benutzers, wobei er ein anderes nicht-erhöhtes Inno-Setup-Installationsprogramm verwendet. Nach dem Deinstallieren des Programms (initiiert durch das systemweite Installationsprogramm mit Administratorrechten) möchte ich die Programmdateien aus dem AppData-Verzeichnis jedes Benutzers deinstallieren.

Ich denke an zwei Lösungen: 1. eine Liste der Windows-Benutzer und zu deren AppData dirs durch Iterieren (scheint viel zu kompliziert) 2. Speichern der Pfade zu den uninstallers in der obigen gemeinsamen Benutzerdatenverzeichnis erwähnt.

Irgendwelche Ideen?

Danke!

Antwort

0

Lösung 1 sieht für mich ziemlich vernünftig aus. So kontrolliert jeder Benutzer seine und nur ihre Installation, und Sie steuern die zentrale gemeinsame Installation.

Für Lösung 2 können Sie einen schreibberechtigten Ordner an einem genau definierten Speicherort erstellen, damit Ihr Installationsprogramm darüber informiert wird, oder einen Registrierungsschlüssel für den gleichen Zweck verwenden. Bedenken Sie jedoch, dass dies zu Sicherheitslücken führen kann, da jeder die Deinstallationspfade anderer Benutzer manipulieren könnte.

+0

Aber wie gehe ich bei der Lösung 2 vor? Wo ist ein Pfad unter Windows, der unabhängig von userappdata dirs ist und normale nicht-erhöhte Benutzer Schreibzugriff haben? – Steve

+0

Ihr Installationsprogramm, das mit Administratorrechten ausgeführt wird, kann _create_ einen solchen Ordner erstellen, der über ausreichende Rechte verfügt. Wahrscheinlich muss es sich dabei um einen Unterordner irgendwo im allgemeinen (admin-run) Installationsordner handeln. – 9000

+0

Kannst du mich irgendwo hinführen, wo sie erklären, wie man das in der Praxis macht? Ich nehme an, selbst wenn ich das tue, muss das Installationsprogramm alle Benutzerkonten durchlaufen und ihnen die Erlaubnis einzeln erteilen? :-) – Steve

1

Würden Sachen unter C: \ Users \ Public \ sich für das qualifizieren, was Sie brauchen?

+1

Ist das nicht nur für Vista und höher verfügbar? Ich brauche auch eine Lösung für XP! – Steve

+0

@Steve: Ich glaube, XP hat einen Ordner für freigegebene Dokumente in Arbeitsplatz, nicht sicher, was der vollständige Pfad dazu ist. Es ist für den lokalen Zugriff für mehrere Benutzer gedacht. –

4

"Gemeinsame Dokumente" Directory in Windows XP

C:\Documents and Settings\All Users\Documents 

Oder

%ALLUSERSPROFILE%\Documents 

in Vista entsprechende Verzeichnis/7

C:\Users\Public 

Oder

%PUBLIC%\Documents 

Aber was Sie wirklich suchen, ist der KNOWNFOLDERID Wert von FOLDERID_PublicDocuments (Legacy CSIDL_COMMON_DOCUMENTS). Die SHGetFolderPath Funktion kann dann den Pfad erhalten.

Oder eine einfache VBScript Alternative, aber ich bin mir nicht sicher, wie zuverlässig diese über OS-Versionen sind:

Const CSIDL_COMMON_DOCUMENTS = &h2e 
Set oShell = CreateObject("Shell.Application") 
Wscript.Echo oShell.Namespace(CSIDL_COMMON_DOCUMENTS).Self.Path 

Ich denke NameSpace nicht, dass bestimmten constant akzeptiert. So können Sie möglicherweise COMMONAPPDATA = &H23 nehmen und dann seine Eltern verwenden.Aber das ist nicht sehr sauber oder internationalisiert:

Wscript.Echo oShell.NameSpace(&h23).ParentFolder.Self.Path & "\Documents" 

Aber da Sie Inno Setup verwenden, sollten Sie wirklich werden mit der {} commondocs Shell Folder Constant und machen es sich einfach.

1

Der Benutzer besitzt den Dokumentordner. Außer Dateien, die kopiert, verschoben, gelöscht oder mit einem anderen Programm bearbeitet werden sollen, wenn Sie etwas dort hinstellen, wegen der Sichtbarkeit für den Benutzer.

Ich empfehle Ihnen, einen Ordner unter den allgemeinen Anwendungsdaten (CSIDL_COMMON_APPDATA oder FOLDERID_ProgramData) in Ihrem Installer mit einer Sicherheitsbeschreibung zu erstellen, die allen Zugriff ermöglicht.

z.

[Dirs] 
Name: "{commonappdata}\productname";Permissions:everyone-modify; 
Verwandte Themen