2009-02-06 7 views
0

J'ai un programme de console écrit en C# qui fonctionne sous l'utilisateur foo. Le programme crée un fichier. Dans certaines situations, une application Web exécutée sous l'IUSR doit pouvoir supprimer les fichiers créés par l'application de console.Création de fichiers C# - comment accorder IUSR DELETE?

Je voudrais accorder DELETE (ou quelque chose d'équivalent) à IUSR lorsque le fichier est créé. Comment puis-je faire cela en C#?

J'ai trouvé FileIOPermission et je ne suis pas sûr de ce que c'est, mais comme vous ne pouvez pas spécifier un utilisateur en particulier, je suis sûr que c'est maintenant ce dont j'ai besoin.

Quelqu'un a eu un bon pointeur sur la façon de faire cela? En passant, je me rends compte que dans certains pays, l'octroi des droits IUSR SUPPRIMER sur n'importe quel fichier serait une chose assez douteuse, mais dans ce cas la nature des fichiers impliqués signifie que je suis heureux d'accorder ces droits IUSR]

Répondre

1

Utilisez l'Explorateur Windows -> sélectionnez le répertoire où réside le fichier -> cliquez avec le bouton droit de la souris -> Propriétés -> onglet Sécurité -> attribuez le droit "Modifier" au compte utilisateur IUSR_xxx.

Je présume que vous avez un accès physique à l'ordinateur qui exécute à la fois l'application de la console et l'application Web.

Modifié: pour le réglage de programmation des autorisations ntfs vous avez besoin de bricoler avec le System.Security.AccessControl.FileSecurity classe et la méthode File.SetAccessControl.

Espérons que ça aide.

+0

@Sabau - merci pour votre réponse. Je voulais définir les permissions par programme plutôt que via l'interface utilisateur. – shearichard

1

Une recherche rapide Google produit Setting NTFS Permissions with C#

+0

@browning: oui je l'ai trouvé aussi mais le lien vers l'échantillon 'gotodotnet' est mort et la recherche sur le site web de remplacement ne tire pas quelque chose nommé 'ACLs .NET' – shearichard

+0

Le lien que @Ken Browning a posté inclut un exemple de code juste en dessous du lien que vous dites est mort. Veuillez également utiliser les commentaires pour répondre à une réponse spécifique ou modifier votre question pour fournir des éclaircissements. –

2

@Sabau: merci pour la modification de votre réponse - il m'a inspiré pour essayer de nouveau et cette fois, je crois avoir obtenu ça a. J'ai écrit un petit programme de test pour que les autres puissent voir comment c'est fait. Pour mes tests, j'ai donné le contrôle total à l'IUSR mais de toute évidence, vous pouvez ajouter/refuser ce que vous voulez.

using System; 
using System.Collections.Generic; 
using System.Text; 
using System.IO; 
using System.Security.Permissions; 
using System.Security.Principal; 
using System.Security.AccessControl; 

namespace GrantingFilePermsTests 
{ 
    class Program 
    { 
    static void Main(string[] args) 
    { 
     string strFilePath1 = "E:/1.txt"; 
     string strFilePath2 = "E:/2.txt"; 

     if (File.Exists(strFilePath1)) 
     { 
     File.Delete(strFilePath1); 
     } 
     if (File.Exists(strFilePath2)) 
     { 
     File.Delete(strFilePath2); 
     } 

     File.Create(strFilePath1); 
     File.Create(strFilePath2); 
     // Get a FileSecurity object that represents the 
     // current security settings. 
     FileSecurity fSecurity = File.GetAccessControl(strFilePath1); 

     // Add the FileSystemAccessRule to the security settings. 
     fSecurity.AddAccessRule(new FileSystemAccessRule("IUSR_SOMESERVER",FileSystemRights.FullControl,AccessControlType.Allow)); 

     // Set the new access settings. 
     File.SetAccessControl(strFilePath1, fSecurity); 



     } 
    } 
} 

Merci à tous pour leurs réponses.

+0

K, merci pour le vote d'avance! :) –