229 votes

Mappez un lecteur réseau pour être utilisé par un service

Supposons qu’un service Windows utilise code qui veut les lecteurs réseau mappés et les chemins UNC. Comment puis-je faire le mappage du lecteur disponible à la session du service lorsque le service est démarré ? Vous identifiant comme l’utilisateur du service et la création d’un mappage persistant n’établira pas le mappage dans le contexte de la fonction réelle.

233voto

ForcePush Points 1099

À utiliser à vos propres risques. (Je l'ai testé sur XP et Server 2008 R2 x64)

Pour ce hack, vous aurez besoin de SysinternalsSuite par Mark Russinovich:

Première étape: Ouvrir une élévation de la cmd.exe invite de commande (Exécuter en tant qu'administrateur)

Étape deux: Élever de nouveau à la racine à l'aide de PSExec.exe: Accédez au dossier contenant SysinternalsSuite et exécutez la commande suivante psexec -i -s cmd.exe vous êtes maintenant à l'intérieur d'une invite de commande qui est nt authority\system et vous pouvez le prouver en tapant whoami. L' -i est nécessaire parce que les mappages de lecteur besoin d'interagir avec l'utilisateur

Étape Trois: Créer la persistance de lecteur mappé sous le compte SYSTÈME avec la commande suivante net use z: \\servername\sharedfolder /persistent:yes

C'est facile!

AVERTISSEMENT: Vous ne pouvez supprimer cette cartographie de la même manière que vous l'avez créé, à partir du SYSTÈME de compte. Si vous avez besoin de l'enlever, suivez les étapes 1 et 2, mais le changement de la commande à l'étape 3 net use z: /delete.

REMARQUE: Le nouveau lecteur mappé apparaissent maintenant pour TOUS les utilisateurs de ce système, mais ils pourront voir affiche en tant que "Lecteur Réseau Déconnecté (Z:)". Ne laissez pas le nom vous tromper. Il peut demander à être déconnecté, mais il va travailler pour tout le monde. C'est comment vous pouvez dire ce hack n'est pas pris en charge par M$.

74voto

larry Points 209

J’ai trouvé une solution qui est similaire à celui avec psexec mais fonctionne sans outils supplémentaires et survit un redémarrage.

Juste ajouter une tâche planifiées, insérer « système » dans le champ « exécuter en tant que » et pointez la tâche sur un fichier batch avec la commande simple

Puis sélectionnez « Exécuter au démarrage du système » (ou similaire, je n’ai pas une version en anglais) et vous avez terminé.

48voto

mdb Points 20629

Vous aurez besoin soit de modifier le service, ou de l'envelopper à l'intérieur d'une aide de processus: en dehors de session/lecteur de problèmes d'accès, la persistance des mappages de lecteur ne sont restaurés sur une ouverture de session interactive, dont les services n'est généralement pas effectuer.

Le helper approche processus peut être assez simple: il suffit de créer un nouveau service que les cartes de la voiture et commence à le "vrai" service de. Les seules choses qui ne sont pas tout à fait triviaux à ce sujet sont:

  • Le service d'assistance aurez besoin de passer sur toutes les SCM commandes (démarrer/arrêter, etc.) pour le service réel. Si le real accepte personnalisé SCM commandes, n'oubliez pas de passer les également (je ne vous attendez pas à un service qui tient compte des chemins d'accès UNC exotiques pour utiliser ces commandes,...)

  • Les choses peuvent devenir un peu délicat d'identification-sage. Si le vrai service s'exécute sous un compte d'utilisateur normal, vous pouvez exécuter le service d'assistance en vertu de ce compte, et tout devrait être OK aussi longtemps que le compte dispose d'un accès approprié à l'action du réseau. Si, en réalité, le service ne fonctionnera que lorsqu'il est exécuté en tant que système local ou somesuch, les choses deviennent plus intéressantes, qu'il soit de ne pas être en mesure de "voir" le lecteur réseau, ou d'exiger certaines informations d'identification de jonglerie pour obtenir des choses à travailler.

46voto

Hal Points 161

Une meilleure solution serait d’utiliser un lien symbolique à l’aide de mklink.exe. Vous pouvez simplement créer un lien dans le système de fichiers utilisables par n’importe quelle application. Voir http://en.wikipedia.org/wiki/NTFS_symbolic_link.

9voto

Treb Points 11153

Vous pourriez nous le "net use "commande":

System.Diagnostics.Process.Start("net.exe", "use K: \\\\Server\\path");

Si cela ne fonctionne pas dans un service, essayez le Winapi et PInvoke WNetAddConnection2

Edit: Évidemment, j'ai mal compris vous - vous ne pouvez pas modifier le code source du service, à droite? Dans ce cas, je voudrais suivre la suggestion de mdb, mais avec un petit twist: Créer votre propre service (permet de l'appeler le service de cartographie) que les cartes de la voiture et d'ajouter ce service de cartographie pour les dépendances pour la première (le travail). De cette façon, le travail de service ne démarrera pas avant que le service de cartographie a commencé (et connecté le lecteur).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X