2010-04-01 14 views
3

J'ai une application winform C# qui s'exécute sous un compte local mais qui a besoin de surveiller les dossiers d'un domaine. J'utilise un code légèrement modifié de here pour copier les fichiers et cela fonctionne très bien. Est-ce qu'un code similaire peut être utilisé avec l'usurpation d'identité de FileSystemWatcher pour que je puisse surveiller un dossier sur un domaine?FileSystemWatcher s'exécutant sous un utilisateur avec emprunt d'identité

+0

La réponse est: Oui. –

+0

Comment cela devrait-il être fait? Est-ce que je crée simplement l'objet FileSystemWatcher en empruntant l'identité du compte de domaine? – AdmSteck

Répondre

6

Oui, il y a une bonne classe d'emprunt d'identité here, inclure cette classe dans votre projet et que de simplement placer votre FileSystemWatcher dans un bloc en utilisant comme ceci:

using (new Impersonator("myUsername", "myDomainname", "myPassword")) 
{ 
    ... 

    <code that executes under the new context> 

    ... 
} 
+0

J'ai enveloppé l'initialisation de mon FileSystemWatcher dans un bloc utilisant pour l'imitateur comme vous l'avez suggéré et cela a fonctionné comme un champion. Merci. – AdmSteck

+0

np, codage heureux ... –

+0

Cela fonctionne, car les handles de fichiers sont ouverts dans le contexte utilisateur emprunté. Même après que l'usurpation d'identité est revenue, l'observateur continuera à regarder. Vous devrez emprunter à nouveau l'identité pour regarder des fichiers différents. – Sophit

1

Vous pouvez:

Appliquer des autorisations à les dossiers de domaine qui permettent aux utilisateurs n'appartenant pas au domaine d'accéder (c.-à-d. tout le monde.)

Ouvrez une session avec un compte de domaine disposant des autorisations et exécutez l'application winform.

Refactorisez le code FileSystemWatcher dans un service Windows et exécutez-le sous un compte Domian avec des autorisations suffisantes.

Emprunter l'identité d'un compte de domaine dans le code existant, il existe plusieurs bonnes solutions sur le projet de code.