2011-08-11 1 views
3

Je crée un fichier zip à partir de msbuild à l'aide de la cible du package. Il crée bien et le dossier que je le mets a des autorisations pour un utilisateur qui permet à cet utilisateur d'avoir le contrôle total du dossier. Cependant, lorsque je supprime le fichier zip, puis exécutez msbuild pour créer le fichier zip à nouveau le fichier zip a perdu les autorisations pour cet utilisateur. Alors, j'utilise un certain utilisateur pour déployer par programme le fichier de package et cet utilisateur n'a plus d'autorisations.Le fichier zip du package de déploiement Web MSBUILD n'hérite pas des autorisations du dossier parent

Comment puis-je forcer ce fichier zip à hériter des autorisations du dossier parent afin que je n'aie pas à ajouter manuellement les autorisations au fichier zip chaque fois que msbuild le crée?

Répondre

1

Il s'avère qu'il n'existe pas de façon spécifique d'indiquer à la cible du package de définir les autorisations. La solution consiste donc à définir vous-même les autorisations après la cible Package.

Voici comment je l'ai fait. La partie d'expression régulière consiste à extraire le nom du fichier de projet du chemin d'accès au fichier de projet que nous avons dans notre script de génération. Ce nom correspond au dossier. \ Output \ Packages \ créé. J'appelle alors cacls dans une commande d'exec pour placer les permissions sur chaque dossier dans ce répertoire pour l'utilisateur que je spécifie.

<Target Name="Package"> 
    <MSBuild Projects="@(PackageProject)" Targets="Package" Properties="Platform=$(Platform); 
                      Configuration=$(Configuration); 
                      DeployOnBuild=true; 
                      DeployTarget=Package; 
             PackageLocation=$(PackageOutputDir)\$([System.Text.RegularExpressions.Regex]::Split($(ProjectName), '(.*\\)([a-z,A-Z,0-9,_,-]+)(\.\*proj;)')[2])\$([System.Text.RegularExpressions.Regex]::Split($(ProjectName), '(.*\\)([a-z,A-Z,0-9,_,-]+)(\.\*proj;)')[2]).zip; 
             PackageAsSingleFile=true; 
             ExcludeFilesFromDeployment=Web.config; 
             _PackageTempDir=$(PackageOutputDir)\temp;"> 
    </MSBuild> 
    <Exec Command="echo y| cacls $(PackageOutputDir)\$([System.Text.RegularExpressions.Regex]::Split($(ProjectName), '(.*\\)([a-z,A-Z,0-9,_,-]+)(\.\*proj;)')[2])\* /G NetworkService:F"/> 
    </Target> 
2

Il serait préférable de restaurer l'héritage des autorisations pour le fichier zip, comme celui-ci

icacls {packageFileName.zip} /reset 
+0

Pas dans ce cas. Il existe d'autres fichiers que le fichier zip que le processus place dans ce dossier. Ils ont également besoin des permissions pour rester les mêmes. Je dois à nouveau ajouter les autorisations au dossier pour qu'elles les héritent correctement. –

+0

icacls */réinitialiser – Vertigo

Questions connexes