Ordnen Sie ein Netzlaufwerk verwendet werden, die von einem Dienst
Nehme an, einige Windows-Dienst verwendet code, der will, dass die zugeordneten Netzwerk-Laufwerke und keine UNC-Pfade. Wie kann ich das drive mapping zur Verfügung, um den service der Sitzung, wenn der Dienst gestartet wird? Anmeldung in der service-Nutzer und erzeugen eines persistenten mapping wird nicht aufbauen die Zuordnung in den Kontext des eigentlichen service.
InformationsquelleAutor der Frage VoidPointer | 2008-10-08
Du musst angemeldet sein, um einen Kommentar abzugeben.
Müssen Sie ändern Sie den service, oder wickeln Sie es in einen Helfer-Prozess: abgesehen von Sitzung/Laufwerk Probleme beim Zugang, permanenten Laufwerkzuordnungen sind nur wiederhergestellt werden, auf eine interaktive Anmeldung, die Dienstleistungen in der Regel nicht durchführen.
Helfer Prozess-Ansatz ist sehr einfach: erstellen Sie einen neuen Dienst, der Karten das Laufwerk und startet die "echten" service. Die einzigen Dinge, die sind nicht ganz trivial über diese sind:
Den helper-Dienst übergeben zu müssen, auf alle geeigneten SCM-Befehle (start/stop, etc.) der eigentliche Dienst. Wenn der eigentliche Dienst akzeptiert kundenspezifische SCM-Befehle, denken Sie daran, übergeben Sie auch diese (ich erwarte nicht, dass ein Dienst, der der Auffassung UNC-Pfade exotischen benutzen solche Befehle, obwohl...)
Dinge können ein bisschen schwierig credential-Weise. Wenn der eigentliche Dienst läuft unter einem normalen Benutzer-account, können Sie die helper-Dienst unter diesem Konto als gut, und alles OK sein sollte, solange das Konto über die entsprechenden Zugriff auf das Netzwerk zu teilen. Wenn der eigentliche Dienst wird nur funktionieren, wenn als lokales System ausgeführt oder somesuch, die Dinge noch interessanter, da es entweder nicht in der Lage zu "sehen" das Netzwerk-Laufwerk, oder erfordern einige Berechtigung jonglieren, um die Dinge zu arbeiten.
InformationsquelleAutor der Antwort mdb
Verwenden Sie dies auf eigenes Risiko. (Ich habe es getestet auf XP und Server 2008 x64 R2)
Für diesen hack brauchen Sie SysinternalsSuite von Mark Russinovich:
Schritt eins:
Öffnen Sie eine erhöhte cmd.exe Eingabeaufforderung (als administrator Ausführen)
Schritt zwei:
Elevate wieder zu root mittels PSExec.exe:
Navigieren Sie zu dem Ordner, der SysinternalsSuite und führen Sie folgenden Befehl aus
psexec -i -s cmd.exe
Sie sind jetzt in einer Eingabeaufforderung, die
nt authority\system
und beweisen Sie dieses durch die Eingabewhoami
. Die-i
benötigt, da die laufwerkszuordnungen müssen mit dem Benutzer interagierenSchritt Drei:
Erstellen der persistenten zugeordnete Laufwerk als das SYSTEM-Konto mit dem folgenden Befehl
net use z: \\servername\sharedfolder /persistent:yes
Es ist ganz einfach!
WARNUNG: Sie können nur entfernen Sie diese Zuordnung, die gleiche Weise Sie es erstellt haben, aus dem SYSTEM-Konto. Wenn Sie brauchen, um es zu entfernen, führen Sie die Schritte 1 und 2, aber ändern Sie den Befehl in Schritt 3 zu
net use z: /delete
.HINWEIS: Die neu erstellte zugeordnete Laufwerk erscheint nun für ALLE Benutzer an diesem system, aber Sie werden sehen, es angezeigt als "nicht verbundene Netzlaufwerk (Z:)". Lassen Sie sich nicht die Namen täuschen. Es kann behauptet werden getrennt, aber es wird Arbeit für alle. Das ist, wie Sie sagen können, dieser hack wird nicht unterstützt von M$.
InformationsquelleAutor der Antwort ForcePush
Ich habe eine Lösung gefunden, die ähnlich ist zu der man mit psexec funktioniert aber ohne zusätzliche tools und überlebt einen Neustart.
Fügen Sie einfach einen sheduled task, legen Sie die "system" in das "run as" - Feld und zeigen Sie den task eine batch-Datei mit dem einfachen Befehl
Wählen Sie dann "ausführen bei Systemstart" (oder ähnlich, habe ich nicht eine englische version) und Sie sind fertig.
InformationsquelleAutor der Antwort larry
Bessere Weg wäre, um einen symbolischen link mit mklink.exe. Sie können erstellen Sie einfach eine Verknüpfung in die Datei-system, die jede app nutzen kann. Sehen http://en.wikipedia.org/wiki/NTFS_symbolic_link.
InformationsquelleAutor der Antwort Hal
Könnten Sie uns den 'net use' Befehl:
Wenn das nicht funktioniert in einem service versuchen die Winapi und PInvoke WNetAddConnection2
Edit: Offenbar habe ich Sie falsch verstanden - Sie können nicht ändern Sie den Quellcode, der Dienst, richtig? In diesem Fall würde ich Folgen Sie dem Vorschlag von mdbaber mit einem kleinen twist: Erstellen Sie Ihren eigenen service (nennen wir es-mapping-service) ordnet dem Laufwerk, und fügen Sie diese mapping-Dienst, um die Abhängigkeiten für die erste (tatsächliche Arbeitszeit) service. So die Arbeits-Dienst wird nicht gestartet, bevor die mapping-Dienst gestartet wurde (und ein Laufwerkbuchstabe zugeordnet wurde).
InformationsquelleAutor der Antwort Treb
Es ist eine gute Antwort hier:
https://superuser.com/a/651015/299678
I. e. Sie können einen symbolischen link, z.B.
InformationsquelleAutor der Antwort philu
ForcePush,
HINWEIS: Die neu erstellte zugeordnete Laufwerk erscheint nun für ALLE Benutzer an diesem system, aber Sie werden sehen, es angezeigt als "nicht verbundene Netzlaufwerk (Z:)". Lassen Sie sich nicht die Namen täuschen. Es kann behauptet werden getrennt, aber es wird Arbeit für alle. Das ist, wie Sie sagen können, dieser hack wird nicht unterstützt, die von M$...
Es hängt alles von der Freigabe-Berechtigungen. Wenn Sie Jeder in der Freigabe-Berechtigungen, das zugeordnete Laufwerk wird von anderen Benutzern zugänglich. Aber wenn Sie nur einige bestimmte Benutzer, deren Anmeldeinformationen, die Sie verwendet in Ihrem batch-Skript und das batch-Skript wurde Hinzugefügt, um die Autostart-Skripte, nur das System-Konto wird Zugriff auf die Freigabe nicht einmal der Administrator.
Also, wenn Sie, zum Beispiel, eine geplante ntbackuo job, System-Konto verwendet werden muss, in 'Ausführen als'.
Wenn Ihr service 'Anmelden als: Lokales Systemkonto' sollte es funktionieren.
Was ich Tatich habe nicht jede Karte Laufwerksbuchstaben in meinem startup-Skript, nur
net use \\\server\share ...
und verwendet UNC-Pfad in meine geplanten Aufgaben. Hinzugefügt ein Anmeldeskript (oder fügen Sie einfach eine batch Datei in den Autostart-Ordner) mit der Zuordnung zu gleichen teilen mit etwas drive letter:net use Z: \\\...
mit den gleichen Anmeldeinformationen. Nun, dass der angemeldete Benutzer können sehen und Zugriff auf das zugeordnete Laufwerk. Es gibt 2 verbindungen zu gleichen teilen. In diesem Fall wird der Benutzer nicht sehen, dass lästige "Disconnected network drive ...". Aber wenn Sie wirklich brauchen, auf diese Freigabe zugreifen, indem Sie den Laufwerkbuchstaben nicht nur UNC-Karte, teilen Sie Sie mit der anderen Laufwerksbuchstaben, z.B. Y für System-und Z-für die Nutzer.InformationsquelleAutor der Antwort lk7777
Einen Weg gefunden zu gewähren, Windows-Service-Zugriff auf Netzwerk-Laufwerk.
Windows Server 2012 mit NFS-Datenträger zum Beispiel:
Schreiben Sie eine batch-Datei vorhanden, zB: C:\mount_nfs.bat
Öffnen Sie die "Task Scheduler", eine neue Aufgabe zu erstellen:
Nach diesen zwei einfachen Schritten, mein Windows ActiveMQ-Dienst läuft unter "Local System" - Privileg, perfekt ausführen, ohne Anmeldung.
InformationsquelleAutor der Antwort Val
Der Grund, warum Sie sind in der Lage, auf das Laufwerk zuzugreifen, wenn Sie normalerweise laufen die ausführbare Datei von der Eingabeaufforderung ist, dass, wenn u sind in der Ausführung als normale exe-Datei ausgeführt werden, dass die Anwendung in der Benutzer-account, von denen Sie sich angemeldet haben . Und, dass Benutzer die Berechtigungen für den Zugriff auf das Netzwerk. Aber , wenn Sie installieren die ausführbare Datei als Dienst standardmäßig aktiviert, wenn Sie sehen, im task manage läuft es unter "SYSTEM" - Konto . Und Sie könnten wissen, dass das "SYSTEM" nicht über die Rechte zum Zugriff auf Netzwerk-Ressourcen.
Kann es zwei Lösungen für dieses problem.
Um das Laufwerk zuzuordnen, die als persistent, wie bereits erwähnt oben.
Gibt es einen weiteren Ansatz, der verfolgt werden können. Wenn Sie öffnen Sie die service-manager, indem Sie in die 'Dienste.msc ' Sie können gehen Sie zu Ihrem Dienst und in den Eigenschaften des Dienstes gibt es eine Registerkarte anmelden, wo Sie angeben können, auf dem Konto wie jedes andere Konto als 'System' können Sie entweder den start-service von Ihrer eigenen angemeldeten Benutzer Konto oder durch 'Network Service'. Wenn Sie dies tun .. den Dienst zugreifen können Netzwerk-Komponenten und Antrieb, auch wenn Sie nicht dauerhaft auch.
Um dies zu erreichen programmgesteuert können Sie Einblick in '"CreateService "" - Funktion an
http://msdn.microsoft.com/en-us/library/ms682450(v=vs. 85).aspx und kann den parameter 'lpServiceStartName' , 'NT-AUTORITÄT\Netzwerkdienst'. Dies wird starten Sie den Dienst unter " Network Service account und dann sind Sie fertig.
Können Sie auch versuchen, indem Sie den service als interaktiven, durch die Angabe SERVICE_INTERACTIVE_PROCESS in dem Diensttyp-parameter Flagge "CreateService" () - Funktion, aber diese werden nur bis XP als Vista und 7 nicht unterstützen diese Funktion.
Hoffe die Lösungen helfen Euch.. Lasst es mich wissen, wenn dies für Sie gearbeitet .
InformationsquelleAutor der Antwort Kushagra
Sie wan ' T, um entweder ändern Sie den Benutzer, dass der Dienst läuft unter "System" oder eine hinterhältige Art und Weise zum ausführen von mapping-System.
Das lustige an der Sache ist, dass dies möglich ist, in der "an" Befehl, einfach planen Sie Ihre Laufwerk-mapping eine minute in die Zukunft, und es läuft unter dem System-Konto, über das die Festplatte sichtbar auf Ihre service -.
InformationsquelleAutor der Antwort Torbjörn Gyllebring
Kann ich nicht kommentieren noch (die Arbeit am guten Ruf), aber ein account angelegt, nur um die Antwort @Tech-Jerk @spankmaster79 (netter name lol) und @NMC Fragen, die Sie berichtet, in Ihrer Antwort auf die "ich habe eine Lösung gefunden, die ähnlich ist zu der man mit psexec, aber Sie funktioniert ohne zusätzliche Werkzeuge und überlebt einen Neustart." post @Larry gemacht hatte.
Die Lösung ist zu einfach durchsuchen Sie die Ordner aus, die innerhalb der eingeloggten account, sprich:
lassen und es auffordern, sich anzumelden, und geben Sie die gleichen Anmeldeinformationen, die Sie für die UNC in psexec. Nach, dass es beginnt zu arbeiten. In meinem Fall, ich denke, das ist, weil der server mit dem service ist nicht Mitglied der gleichen Domäne wie der server bin ich-mapping zu. Ich denke, wenn der UNC und der geplante task beziehen sich beide auf die IP anstelle des Hostnamens
kann es vermeiden das problem vollständig.
Wenn ich jemals genug bekommen rep Punkte hier werde ich hinzufügen, diese auch als Antwort statt.
InformationsquelleAutor der Antwort CanadaDave
Anstatt sich auf ein persistentes Laufwerk haben, können Sie legen Sie die Skript-map/unmap das Laufwerk jedes mal, wenn Sie es verwenden:
Dies funktioniert für mich.
InformationsquelleAutor der Antwort jeff