WIX: Donner des Autorisations pour un dossier
J'ai lu tous les sujets liés et n'ont pas trouvé une réponse à mon problème.
Je voudrais donner toutes les autorisations nécessaires pour le SYSTÈME et de le Lire & Exécuter des autorisations à des Utilisateurs de groupe d'un dossier dans Program Files. Rien de plus, rien de moins.
Je sais qu'il y a 3 façons de donner des autorisations pour un dossier à l'aide de WIX, aucun d'entre eux sont vraiment bons pour moi et je vais vous expliquer pourquoi:
1) Régulière de l'Autorisation de l'élément:
<CreateFolder Directory="Test">
<Permission User="SYSTEM" GenericAll="yes"/>
<Permission User="Users" Domain="[LOCAL_MACHINE_NAME]"
GenericRead="yes" Read="yes" GenericExecute="yes" ChangePermission="yes"/>
</CreateFolder>
Problème: Il échoue sur le système d'exploitation étranger car il ne sait pas les "Utilisateurs" mot-clé. Je l'ai essayé avec SID. A côté de cela, j'ai besoin de placer la Permission de l'élément sous chaque fichier dans le répertoire de Test (mais si c'était le seul cas, j'aurais réussi)
2) WixUtilsExtension PermissionEx élément:
<CreateFolder Directory="Test">
<util:PermissionEx User="SYSTEM" GenericAll="yes"/>
<util:PermissionEx User="Users" Domain="[LOCAL_MACHINE_NAME]"
GenericRead="yes" Read="yes" GenericExecute="yes" ChangePermission="yes"/>
</CreateFolder>
Problème: Le dossier conserve également les autorisations par défaut du dossier Program Files. Je ne peux pas le permettre.
3) PermissionEx avec Sddl:
Problème: Cet élément est uniquement disponible lors de l'installation avec MSI 5.0. Je suis en utilisant le programme d'installation 3.01.
Je vais être heureux d'obtenir pour toute solution, y compris des solutions avec des actions personnalisées...
OriginalL'auteur Hila | 2010-02-14
Vous devez vous connecter pour publier un commentaire.
Utiliser le code suivant pour atteindre cet objectif sans une action personnalisée. J'ai vérifié cela fonctionne (aussi sur les dossiers enfant). Aussi la L'Utilisateur De Tout Le Monde est mappée sur la version localisée de windows systèmes d'exploitation.
Je n'ai pas eu de problèmes signalés et nous déployer à toutes les cultures. Comment avez-vous résolu ce problème?
OriginalL'auteur Blake Niemyjski
J'ai eu exactement ce même problème et en a parlé à Rob M environ. J'allais faire Chrétien G de réponse (https://stackoverflow.com/a/5296967/18475), mais Rob a suggéré d'utiliser WixQueryOsWellKnownSID (http://wix.sourceforge.net/manual-wix3/osinfo.htm) pour obtenir autour de la non-locales.
Dans le
.wxs
fichier que vous ajoutez les éléments suivants:Et plus bas dans le
.wxs
fichier où vous souhaitez appliquer les autorisations c'est juste comme ça:Maintenant, lorsque vous exécutez la lumière, vous avez juste besoin de lien
WixUtilExtension
.REMARQUE: Selon votre version de WiX, cela peut ne pas être entièrement pris en charge. Si cela ne fonctionne pas pour vous, il peut y avoir d'autres options que vous pouvez utiliser pour traduire les Peid.
Cela ne fonctionne pas pour moi. [WIX_ACCOUNT_USERS] sera réglé à "BUILTIN\Utilisateurs" et accorde l'autorisation à un utilisateur appelé "BUILTIN".
Ladite comportement est vrai uniquement si vous définissez les autorisations dans un module de fusion! À l'aide de [WIX_ACCOUNT_USERS] dans un WiX projet et pas dans un WiX module de fusion définit les autorisations pour le groupe d'utilisateurs correctement.
Merci pour le suivi! Nous avons terminé la sauvegarde.
FWIW, nous sommes allés avec les Peid de l'IIRC. Beaucoup plus déterministe.
OriginalL'auteur ferventcoder
Une autre option serait d'avoir un simple CA qui va juste traduire un msi de la propriété qui contient le SID pour le nom du groupe de l'localisée OS. Le CA ne doit pas être différé et ce n'est pas de faire le travail de définition des autorisations.
Ci-dessous est un échantillon de CA qui lit la valeur de PROPERTY_TO_BE_TRANSLATED msi de la propriété et se traduit par la msi propriété indiqué par elle. De cette façon, vous pouvez exécuter le CA de traduire les différents msi propriétés.
Dans WiX vous définissez les propriétés pour être convertis en utilisant le SID pour les comptes:
Créer la CA va définir le PROPERTY_TO_BE_TRANSLATED bien et puis d'appeler le CA de faire la traduction:
N'oubliez pas d'utiliser le msi propriétés lorsque vous définissez les autorisations:
Enfin, le calendrier de l'autorité de certification avant CreateFolder
De cette façon, le CA est en train de faire seulement un simple travail, en laissant la définition des permissions pour le WiX élément.
OriginalL'auteur Cristian G
Que le <Permission> élément efface l'héritage des permissions de dossiers parent, vous pouvez essayer d'utiliser un seul <Permission> élément pour les utilisateurs "tout le monde" ou "Administrateurs", suivi par <util:PermissionEx> éléments pour définir des autorisations pour les noms d'utilisateur ne sont pas pris en charge par le <Permission> élément, par exemple:
Il n'est pas nécessaire de définir explicitement l'autorisation pour le SYSTÈME, comme ceux-ci sont ajoutés automatiquement par l'installateur.
OriginalL'auteur Gerke Geurts
vous avez besoin pour mettre en œuvre différée de l'action personnalisée pour la modification des autorisations. c# action personnalisée exemple:
vous avez peut-port sur le C++, action personnalisée doit être différé que vous devez accéder à votre session de propriétés par CustomActionData
OriginalL'auteur necrostaz