2016-10-26 1 views
1

J'ai un service Windows qui sera exécuté sur un serveur client. Ce service doit accéder à 2 dossiers situés dans différents dossiers partagés (Y: \ et Z: \) qui se trouvent tous les deux sur des ordinateurs distincts (3 ordinateurs au total).Comment obtenir un service Windows pour accéder à un dossier réseau partagé?

Actuellement, le service ne peut voir que les fichiers situés sur la même machine. Lorsque je fais un IO.Directory.Exists() sur les dossiers partagés, il renvoie false.

Voici ce que j'ai essayé:

  1. en cours en tant que service réseau
  2. Courir comme un système local
  3. Exécution en tant que service local
  4. existence de tests avec \\ 192.168.1. xx \ path \ to \ folder
  5. test d'existence avec Y: \ et Z: \
  6. Création d'un utilisateur sur les autres ordinateurs avec le même nom d'utilisateur et le même mot de passe d
  7. Vérification des dossiers a donné un accès complet à tous

Rien n'a encore travaillé, toute aide est très appréciée.

+0

À moins que les machines ne se trouvent dans un domaine, il est probablement préférable que le service se connecte explicitement à l'aide de WNetAddConnection2 ou similaire, en fournissant un nom d'utilisateur et un mot de passe. –

+0

J'ai essayé de le faire et j'ai eu cette erreur: ERROR_NO_SUCH_LOGON_SESSION: Une session d'ouverture de session spécifiée n'existe pas. Il peut déjà avoir été terminé. (Code: 1312) – wsnyder

+0

J'ai vu cela se produire (sur Windows 10) lorsque le nom d'utilisateur n'est pas complet, essayez 'SERVERNAME \ USERNAME' (ou' DOMAIN \ USERNAME' s'il s'agit d'un compte de domaine ou si le serveur est également un contrôleur de domaine). –

Répondre

0

Dans un environnement Active Directory, le service réseau et le système local ont tous deux un accès réseau aux autres machines du domaine; le serveur doit simplement être configuré pour accorder l'accès au compte d'ordinateur du client dans le domaine, c'est-à-dire le compte COMPUTERNAME$. Si vous utilisez un chemin UNC, la connexion sera établie automatiquement. Vous ne pouvez toujours pas utiliser les lettres de lecteur établies dans une autre session d'ouverture de session, mais dans la plupart des circonstances, le chemin UNC le fera.

Dans un environnement autonome, c'est un peu plus compliqué. La seule approche fiable consiste à établir explicitement la connexion réseau, ce que vous pouvez faire en utilisant WNetAddConnection2 ou l'une des différentes alternatives. (Ou si vous ne pouvez pas appeler l'API Win32, vous pouvez passer à la commande net use.) Dans les deux cas, une fois la connexion établie, vous pouvez utiliser un chemin UNC. Il n'est généralement pas nécessaire de mapper une lettre de lecteur.

Si doit avoir une lettre de lecteur pour une raison quelconque, il est généralement préférable d'utiliser la fonction WNetUseConnection au lieu de WNetAddConnection2. Cela peut être configuré pour sélectionner une lettre de lecteur automatiquement, de sorte que vous n'avez pas à essayer de comprendre quelles lettres sont déjà utilisées. Notez que selon les circonstances, il peut être nécessaire d'utiliser la forme longue du nom d'utilisateur pour le compte sur le serveur, c'est-à-dire SERVERNAME\USERNAME ou DOMAINNAME\USERNAME s'il s'agit d'un compte de domaine. Windows 10 clients semblent particulièrement pointilleux à ce sujet pour une raison quelconque.