2009-10-06 9 views
2

Je suis aux prises avec celui-ci. J'ai besoin de définir les autorisations du dossier App_Data dans un site ASP.Net à modifier pour le compte NetworkService via mon programme d'installation Wix. J'ai essayé le suivant mais sans chance. J'ai également essayé de spécifier Append mais j'ai reçu une erreur disant que ce n'est pas autorisé.WiX définir le dossier App_Data permission de modifier pour NetworkService

+0

Quelle erreur obtenez-vous exactement? –

Répondre

5

Vous voulez User = "NetworkService". Il existe une liste d'utilisateurs bien connus dans le code SecureObj.cpp qui appuie sur PermissionEx.

`// figure out the right user to put into the access block 
    if (!*pwzDomain && 0 == lstrcmpW(pwzUser, L"Everyone")) 
    { 
     hr = AclGetWellKnownSid(WinWorldSid, &psid); 
    } 
    else if (!*pwzDomain && 0 == lstrcmpW(pwzUser, L"Administrators")) 
    { 
     hr = AclGetWellKnownSid(WinBuiltinAdministratorsSid, &psid); 
    } 
    else if (!*pwzDomain && 0 == lstrcmpW(pwzUser, L"LocalSystem")) 
    { 
     hr = AclGetWellKnownSid(WinLocalSystemSid, &psid); 
    } 
    else if (!*pwzDomain && 0 == lstrcmpW(pwzUser, L"LocalService")) 
    { 
     hr = AclGetWellKnownSid(WinLocalServiceSid, &psid); 
    } 
    else if (!*pwzDomain && 0 == lstrcmpW(pwzUser, L"NetworkService")) 
    { 
     hr = AclGetWellKnownSid(WinNetworkServiceSid, &psid); 
    } 
    else if (!*pwzDomain && 0 == lstrcmpW(pwzUser, L"AuthenticatedUser")) 
    { 
     hr = AclGetWellKnownSid(WinAuthenticatedUserSid, &psid); 
    } 
    else if (!*pwzDomain && 0 == lstrcmpW(pwzUser, L"Guests")) 
    { 
     hr = AclGetWellKnownSid(WinBuiltinGuestsSid, &psid); 
    } 
    else if(!*pwzDomain && 0 == lstrcmpW(pwzUser, L"CREATOR OWNER")) 
    { 
     hr = AclGetWellKnownSid(WinCreatorOwnerSid, &psid); 
    } 
    else if (!*pwzDomain && 0 == lstrcmpW(pwzUser, L"INTERACTIVE")) 
    { 
     hr = AclGetWellKnownSid(WinInteractiveSid, &psid); 
    } 
    else if(!*pwzDomain && 0 == lstrcmpW(pwzUser, L"Users")) 
    { 
     hr = AclGetWellKnownSid(WinBuiltinUsersSid, &psid); 
    } 
    else` 

Le tableau Windows Installer LockPermission (l'élément d'autorisation dans WiX) prennent également en charge les noms les plus connus, mais ils sont localisés qui est une conception vraiment pauvre, à mon humble avis. C'est pourquoi WiX a cette liste connue.

+0

J'avais l'impression d'être proche au premier essai, mais j'avais heurté un mur et je devais travailler. Merci de me garder dans le droit chemin. –

+0

Je vois où je me suis trompé. J'ai essayé PermissionEx à un moment avec "Network Service" (notez l'espace) parce que c'est ainsi que s'affiche dans la liste des utilisateurs dans la boîte de dialogue de sécurité dans Windows. Le nom bien connu ici n'a pas d'espace. –

+0

Oui, vraiment cette liste devrait être dans la documentation de toute façon.

1

Eh bien, j'ai trouvé une réponse (probablement pas la réponse). Vous ne pouvez pas définir l'autorisation de fichier en utilisant util: PermissionEx pour le compte "Network Service" (ce n'est pas un sid bien connu ou quelque chose comme ça). À la fin, j'ai écrit une action personnalisée qui définit l'autorisation en utilisant l'utilitaire cacls.exe.

<CustomAction Id="PermissionAppData" Directory="TARGETDIR" 
    ExeCommand="&quot;[SystemFolder]cacls.exe&quot; 
    &quot;[INSTALLDIR]\App_Data&quot; 
    /T /E /G &quot;NT AUTHORITY\Network Service:C&quot;" Return="check" /> 
+0

Ce n'est pas la meilleure réponse. :) On dirait que PermissionEx vous donnera ce que vous voulez. –

Questions connexes