Net use-Befehl verhält sich unterschiedlich in CMD im Vergleich zu der Ausführung durch Code durch CMD

539
BlueBarren

Ich programmiere eine kleine Anwendung, die hier zu sehen ist und einen Befehl net.exe in cmd ausführt, um einen Netzwerkspeicherort als Laufwerk hinzuzufügen. (Ich verlinke nur meine Codierungsfrage, wenn sie irgendwie in Beziehung steht und jemand etwas zu stackoverflow beitragen möchte.)

net use z: \\PCName\d$\Folder1\Folder2

Ich habe derzeit Probleme mit dem Befehl, der durch meine Anwendung ausgeführt wird und sich nicht so verhält, wie er sollte. Damit meine ich, dass cmd angibt, dass der Befehl so ausgeführt wurde, wie er hätte haben sollen, aber keine Aktion stattgefunden hat:

zeigt den Befehl an, der wie vorgesehen ausgeführt wurde

Wenn ich meinen Befehl jedoch manuell eingebe, verhält er sich wie erwartet:

es verhält sich wie erwartet

Wenn ich ein Laufwerk über meine Anwendung hinzufüge, wird nichts hinzugefügt, und wenn ich den Befehl selbst über cmd eingebe, wird das Laufwerk in Windows Explorer angezeigt.

Zuerst dachte ich, es könnte ein Codierungsproblem sein, aber nachdem ich mich mit dem Problem auseinandergesetzt hatte, denke ich, dass meine Bewerbung ziemlich solide ist. Jetzt bin ich im Gedanken, dass es sich um Windows oder eine andere Anwendung handeln könnte, die sich seltsam verhält.

Es kann erwähnenswert sein, dass ich bei der Arbeit bin, wo es eine Menge Netzwerkrichtlinien und Sicherheit gibt, jedoch habe ich die Berechtigung, auf Laufwerke zuzugreifen.

Könnte es Windows sein, eine Anwendung oder mein Netzwerk, die dieses Verhalten verursachen, oder sollte dies nicht der Fall sein?

0

2 Antworten auf die Frage

1
Ben N

Windows funktioniert wie vorgesehen und Ihr Code ist in Ordnung. Der Trick besteht darin, dass Ihr Programm als Administrator ausgeführt wird, der Explorer jedoch nicht ausgeführt wird. Wenn Ihr Programm das Netzlaufwerk zuordnet, wird die Zuordnung Prozessen in derselben Anmeldesitzung zur Verfügung gestellt - nicht dem Benutzerkonto. Von MSDN :

... Verbindungen, die mit Microsoft LAN Manager hergestellt wurden, sind nur für Anwendungen sichtbar, die in derselben Anmeldesitzung ausgeführt werden wie die Anwendung, die die Verbindung hergestellt hat. (Um die Verbindung in die Aufzählung aufzunehmen, reicht es nicht aus, dass die Anwendung in dem Benutzerkonto ausgeführt wird, mit dem die Verbindung erstellt wurde.)

Wenn Sie eine andere Eingabeaufforderung für die Verwaltung öffnen, wird das Laufwerk angezeigt, das Ihr Programm zugeordnet hat. Wenn Ihr Programm nicht als Administrator ausgeführt wurde, werden die zugeordneten Laufwerke im Explorer angezeigt.

Damit Nicht-Admin- und Admin-Anwendungen denselben Satz von Zuordnungen anzeigen können, erstellen Sie einen DWORD-Aufruf EnableLinkedConnections, der 1innerhalb dieses Schlüssels ( Quelle ) aufgerufen wird :

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System 

Nach dem Neustart erstellt Ihr übergeordnetes Programm Freigaben, die von anderen Anwendungen nicht angezeigt werden können.

@ BlueBarren Ich glaube, das Passwort geht zwischen dem Netzwerkpfad und dem `/ USER`-Schalter. Versuchen Sie 'net use z: \\ server \ share password / USER: Domäne \ Benutzername'. Ben N vor 7 Jahren 0
Es war nicht der Befehl, es war etwas anderes, was ich tat, keine Notwendigkeit, sich darum zu kümmern. BlueBarren vor 7 Jahren 0
0
Ƭᴇcʜιᴇ007

Ihren Screenshots zufolge läuft Ihr Programm im erhöhten Modus ("als Administrator"), wobei die Eingabeaufforderung, von der Sie es ausgeführt haben, nicht manuell ausgeführt wird.

Wenn Sie "Als Administrator" ausführen, verwendet es einen anderen Benutzerkontext als Ihr normaler Benutzer. Zugeordnete Laufwerke, die in einem Kontext erstellt wurden, stehen dem anderen nicht zur Verfügung.

Diese vorhandene verwandte SuperUser-Frage enthält weitere Informationen / Anleitungen:

Nur Administratoranmeldeinformationen haben die Berechtigung, eine Remote-Verbindung zu einem anderen Computer herzustellen. Sowohl in meiner Anwendung als auch wenn ich den Befehl über CMD eingebe, gebe ich ihnen dieselbe Gruppe von Administratoranmeldeinformationen. Würden Sie immer noch sagen, dass dies das Problem verursacht? BlueBarren vor 7 Jahren 0
Die verwendeten Ausweise haben (im Prinzip) nichts damit zu tun. Es dreht sich alles um den Kontext, in dem der Prozess läuft. Ƭᴇcʜιᴇ007 vor 7 Jahren 0
Ja, das verstehe ich jetzt. Die Erklärung von @BenN gefiel mir sehr gut, es machte mir sehr viel Sinn. BlueBarren vor 7 Jahren 0