Les questions sur ce sujet ne manquent pas, mais j'ai toujours des problèmes. Voici ma situation. J'ai un service dont j'ai besoin pour regarder un chemin spécifié dans le fichier de configuration. Cela fonctionne très bien quand j'ai utilisé un lecteur local.
Cependant, lorsque je le change en quelque chose comme \\server2\secondary\temp\watch_folder
, le service ne démarre pas. L'erreur dans le journal est
Le nom du répertoire \\ server2\secondary\temp\watch_folder n'est pas valide.
Si je copie cela directement dans l'Explorateur Windows, le dossier s'ouvre correctement. Si je prends mon code et le colle dans une ancienne application Winforms, cela fonctionne bien. J'ai essayé tous les comptes "Log On As". 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 perdue et je pense que je la regarde depuis trop longtemps. J'apprécie sincèrement toute aide.
Merci, Nick
EDIT Voici l'exception:
Le service ne peut pas être démarré. System.ArgumentException: le nom de répertoire\server2\Secondary\temp\watch_folder n'est pas valide.
at System.IO.FileSystemWatcher.set_Path (valeur de chaîne)
sur FileWatcher.FileWatcher.Watch ()
sur FileWatcher.FileWatcher.OnStart (String [] args)
at System.ServiceProcess.ServiceBase.ServiceQueuedMainCallback (état de l'objet)
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ème, mais j’ai répliqué votre exception au moment même où:
Votre problème est sûrement lié aux autorisations, je pense que l'utilisateur en cours d'exécution ne dispose pas des 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 est probablement en cours d'exécution sous un compte d'utilisateur qui n'a pas l'autorisation de ce partage. Essayez de changer le service Windows pour qu'il s'exécute sous différentes informations d'identification.
J'ai trouvé un moyen vraiment intéressant 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 consistait à inclure le nom de domaine de notre société dans le chemin du serveur:
\\servername.company.com\directorytowatch