2010-06-08 24 views
2

Pendant mon NSIS script d'installation pour une application WinForms, j'utiliser la commande CACLS suivante pour donner le groupe d'utilisateurs tous les droits à un sous-dossier:CACLS Confusion

Exec 'CACLS "$INSTDIR\SubFolder" /E /T /C /G "Users":F' 

Donc, en effet commande exécutée le CACLS est quelque chose comme:

CACLS "c:\Program Files\MyApp\SubFolder" /E /T /C /G "Users":F 

Quand je regarde alors les autorisations de dossier dans l'Explorateur Windows (clic droit sur le dossier et choisissez Propriétés, allez dans l'onglet sécurité), les autorisations correctes sont là, mais ils ne sont pas modifiables. En outre, en cliquant sur le bouton Avancé pour les «Paramètres de sécurité avancés», SubFolder hérite des autorisations de groupe «Utilisateurs» d'un «objet parent», mais de l'objet parent, car ce n'est pas le dossier ci-dessus.

Pourquoi les autorisations ajoutées par CACLS ne sont-elles pas modifiables et pourquoi sont-elles héritées d'un objet parent inexistant? Je pense que j'ai peut-être mal placé les options sur CACLS.

Je suis sous Windows XP.

Répondre

3

Je pense que je l'ai compris: Modification de CACLS pour utiliser/P 'remplacer' plutôt que/G 'grant' semblait fonctionner mieux:

CACLS "c:\Program Files\MyApp\SubFolder" /E /T /C /P "Users":F 

Les options créées étaient alors modifiables dans l'onglet 'Sécurité' de l'Explorateur Windows.

2

NSIS a un plugin pour définir des autorisations, vous devriez probablement l'utiliser (je ne me souviens pas si XP a même cacls)

L'autorisation héritée des « utilisateurs » doit venir de quelque part clairement, que ce soit la racine du lecteur ou un parent de votre dossier parent (la boîte de dialogue de sécurité avancée doit avoir une colonne héritée de la liste)

+0

J'ai regardé tous les dossiers parents et les permissions ne semblaient pas provenir de là. Merci pour la suggestion de plugin cependant. – codeulike

+0

+1 pour le plug-in AccessControl. Cela a fonctionné à merveille pour moi, et je le recommanderais car il utilise l'API Windows plutôt que de dépendre de la présence d'un utilitaire comme les cacls sur la machine cible. –