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.
Réponses
Trop de publicités?À 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$.
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é.
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.
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.
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).