FileSystemWatcher pour regarder le chemin UNC

Il n'y a pas de pénurie de questions sur ce sujet, mais j'ai toujours des problèmes. Voici ma situation. J'ai un service dont j'ai besoin pour regarder un chemin qui est spécifié dans le fichier de configuration. Cela fonctionne très bien quand j'ai utilisé un lecteur local.

Cependant, quand je le change en quelque chose comme \server2secondarytempwatch_folder le service ne démarre pas. L'erreur dans le journal est

Le nom du répertoire server2 secondary tempwatch_folder n'est pas valide.

Si je copie cela directement dans Windows Explorer le dossier s'ouvre bien. Si je prends mon code et le colle dans une ancienne application Winforms, cela fonctionne bien. J'ai essayé tous les comptes" Se connecter en tant que". Je l'ai configuré pour utiliser le compte administrateur, mais toujours pas de dés.

Voici mon code:

_watcher = new FileSystemWatcher();
_watcher.Path = ConfigurationManager.AppSettings["WatchFolder"];
_watcher.NotifyFilter = NotifyFilters.LastWrite | NotifyFilters.FileName;
_watcher.Filter = "*.txt";
_watcher.Created += new FileSystemEventHandler(OnCreated);
_watcher.Error += new ErrorEventHandler(OnError);
_watcher.EnableRaisingEvents = true;

Des idées? Je suis à perte et à ce stade, je pense que je l'ai regardé trop longtemps. J'apprécie sincèrement toute aide.

Merci, Nick

modifier Voici l'exception:

Le Service ne peut pas être commencer. Système.ArgumentException: le nom du répertoire server2Secondarytemp watch_folder n'est pas valide.
dans System. IO. FileSystemWatcher. set_Path(valeur de chaîne)
chez FileWatcher.FileWatcher.Regarder ()
chez FileWatcher.FileWatcher.OnStart(chaîne [] args)
au système.ServiceProcess.ServiceBase.ServiceQueuedMainCallback (État de L'objet)

21
demandé sur 3per 2012-06-27 08:24:10

5 réponses

Je viens d'essayer ceci:

var _watcher = new FileSystemWatcher();
_watcher.Path = @"\\10.31.2.221\shared\";
_watcher.NotifyFilter = NotifyFilters.LastWrite | NotifyFilters.FileName;
_watcher.Filter = "*.txt";
_watcher.Created += new FileSystemEventHandler((x, y) =>Console.WriteLine("Created"));
_watcher.Error += new ErrorEventHandler( (x, y) =>Console.WriteLine("Error"));
_watcher.EnableRaisingEvents = true;
Console.ReadKey();

Cela fonctionne sans problèmes, mais j'ai répliqué votre exception juste au moment où:

  • l'utilisateur en cours d'exécution n'a pas les autorisations pour lire le dossier distant.
  • Le dossier distant n'existe pas.

Votre problème est sûrement lié aux autorisations, je pense que l'utilisateur en cours d'exécution n'a pas les autorisations nécessaires.

Une autre chose que vous pouvez essayer est de mapper le dossier distant à un local.

Exécutez ceci dans le cmd:

NET USE Z: \\server2\Secondary\temp\watch_folder /user:Domain\UserName Password

, Puis dans votre code:

_watcher.Path = @"Z:\";
19
répondu Marco Medrano 2012-06-27 16:53:58

Votre service s'exécute probablement sous un compte d'utilisateur qui n'a pas l'autorisation de ce partage. Essayez de modifier le service windows pour qu'il s'exécute sous des informations d'identification différentes.

5
répondu John Koerner 2012-06-27 13:39:06

J'ai trouvé un moyen vraiment cool d'obtenir UNC avec des informations d'identification fonctionnant avec FileSystemWatcher dans un service windows sur codeproject.

Voir Adrian Hayes post: http://www.codeproject.com/Articles/43091/Connect-to-a-UNC-Path-with-Credentials

Sa solution fonctionne un régal.

2
répondu John 2013-12-03 14:37:19

Vous devrez peut-être avoir votre chemin comme

\\server2\\Secondary\\temp\\watch_folder
0
répondu Thor Burfine 2012-10-19 19:21:32

J'ai aussi rencontré ce problème. Mon correctif était d'inclure le nom de domaine de notre entreprise dans le chemin du serveur:

\\servername.company.com\directorytowatch
0
répondu Chris 2015-10-28 18:23:40