Existe-t-il un dossier partagé dans Windows auquel les utilisateurs non élevés ont un access en écriture?

Je sais que commonappdata (Tous les utilisateurs) peut contenir des parameters d’application à l’échelle du système, mais sous Vista / 7, les utilisateurs non élevés ne peuvent pas écrire dans ce répertoire.

Existe-t-il un dossier partagé par les utilisateurs et tout utilisateur non administrateur peut y écrire?

Voici pourquoi j’en ai besoin: Mon application est installée dans le répertoire PF par un installateur Inno Setup avec des droits élevés. Ensuite, lorsque l’utilisateur non administrateur exécute le programme, il copie ses parameters dans le répertoire AppData de l’utilisateur à l’aide d’un autre programme d’installation Inno Setup non élevé. Lors de la désinstallation du programme (lancée par le programme d’installation à l’échelle du système avec des droits d’administrateur), je souhaite désinstaller les fichiers du programme du répertoire AppData de chaque utilisateur.

Je peux penser à deux solutions: 1. Obtenir une liste des utilisateurs de Windows et itérer dans leurs répertoires AppData (semble trop compliqué) 2. Stocker les chemins vers les programmes de désinstallation dans le répertoire de données utilisateur commun mentionné ci-dessus.

Des idées?

Merci!

Répertoire “Documents partagés” sous Windows XP

C:\Documents and Settings\All Users\Documents 

Ou,

 %ALLUSERSPROFILE%\Documents 

Répertoire correspondant dans Vista / 7

 C:\Users\Public 

Ou,

 %PUBLIC%\Documents 

Mais ce que vous recherchez vraiment, c’est la valeur FOLDERID_PublicDocuments de FOLDERID_PublicDocuments (inheritance CSIDL_COMMON_DOCUMENTS ). La fonction SHGetFolderPath peut alors vous donner le chemin.

Ou une alternative plus facile à VBScript, mais je ne suis pas sûr de la fiabilité de ces versions d’OS:

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

Je pense que NameSpace n’accepte pas cette constante particulière. Vous pouvez donc prendre COMMONAPPDATA = &H23 , puis utiliser son parent. Mais ce n’est pas très propre ou internationalisé:

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

Mais étant donné que vous utilisez Inno Setup, vous devez utiliser la constante {commondocs} Shell Folder et la simplifier pour vous-même.

L’utilisateur est propriétaire du dossier de document. Attendez-vous à ce que les fichiers soient copiés, déplacés, supprimés ou modifiés avec un autre programme si vous y mettez quelque chose, en raison de la visibilité de l’utilisateur.

Je vous suggère de créer un dossier sous les données d’application communes (CSIDL_COMMON_APPDATA ou FOLDERID_ProgramData) dans votre programme d’installation avec un descripteur de sécurité permettant l’access à tous.

Par exemple

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

Est-ce que les choses sous C: \ Users \ Public \ se qualifient pour ce dont vous avez besoin?

La solution 1 me semble tout à fait raisonnable. Ainsi, chaque utilisateur contrôle uniquement leur installation et vous contrôlez l’installation partagée centrale.

Pour la solution 2, vous pouvez créer un dossier autorisé en écriture dans un emplacement bien défini afin que votre installateur en soit informé ou utiliser une clé de registre dans le même but. Mais gardez à l’esprit que cela peut créer une faille de sécurité, car n’importe qui pourrait falsifier les chemins de désinstallation des autres utilisateurs .