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)
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:\";
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.
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.
Vous devrez peut-être avoir votre chemin comme
\\server2\\Secondary\\temp\\watch_folder
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