2008-09-22 17 views
4

Mon application est installée via NSIS.Où stocker les données inscriptibles devant être partagées par tous les utilisateurs dans un programme d'installation Vista?

Je souhaite que le programme d'installation installe le programme pour tous les utilisateurs.

Je peux le faire en installant dans le répertoire 'Program Files'.

Il existe un fichier de base de données (firebird) que tous les comptes d'utilisateurs du système doivent partager.

Si je stocke ce fichier de base de données dans le répertoire 'Program Files', il sera en lecture seule.

Si je le stocke dans le répertoire APPDATA des utilisateurs, ils auront chacun une copie différente, lorsqu'un utilisateur ajoute des données que les autres ne verront pas. Option 1 - Dans mon répertoire d'application sous 'Program Files', créez un répertoire 'Data', dans mon installateur, faites en sorte que ce répertoire soit accessible à tous, de manière à ce que la virtualisation des 'programmes' ne soit pas lancée. tous les utilisateurs peuvent mettre à jour le fichier et voir les changements de chacun.

D'autres options?

Répondre

4

Les données pour tous les utilisateurs doivent être stockées dans% ALLUSERSPROFILE% ou appelez SHGetFolderPath() avec le paramètre CSIDL_COMMON_APPDATA pour obtenir la zone de stockage de tous les utilisateurs.

Voir http://www.deez.info/sengelha/2006/02/28/windows-vista-changes/ pour plus de détails.

+1

En fait, la solution correcte consiste à utiliser $ APPDATA dans NSIS * après * vous avez défini 'SetShellVarContext all'. – sorin

+2

En plus de cela, vous devez modifier le 'ACL' lorsque vous créez le répertoire car, par défaut, il ne sera lisible que par le groupe' Users'. – sorin

+0

@Sorin mais comment définir l'ACL dans NSIS? –

3

Quelque part sous le profil Tous les utilisateurs serait l'emplacement évident. Je pense qu'il existe des règles sur qui obtient par défaut la lecture/écriture, mais la documentation MS recommande si vous avez besoin de quelque chose de différent pour créer un sous-répertoire et définir correctement les ACL dans le programme d'installation.

0

J'utiliserais Plus précisément:

SetShellVarContext all 
SetOutPath $APPDATA 
File "MyInsecurelySharedFile.txt" 

Voir la NSIS Scripting Reference pour plus d'informations.