2012-03-28 1 views
0

ich net user mit C#Wie net user mit C# verwenden

System.Diagnostics.ProcessStartInfo proccessStartInfo = new System.Diagnostics.ProcessStartInfo("net user " + id + " /domain"); 

proccessStartInfo.CreateNoWindow = true; 
System.Diagnostics.Process proc = new System.Diagnostics.Process {StartInfo = proccessStartInfo}; 
proc.Start(); 

string result = proc.StandardOutput.ReadToEnd(); 
textBoxOp.Text = result; 

Wenn dem ich den Code ausführen Win32-Ausnahme tritt mit der Meldung Das System kann die Datei angegeben nicht finden kann, verwenden versuchen

Details von Ausnahmen sind wie folgt

bei System.Diagnostics.Process.StartWithShellExecuteEx (Process sta rtInfo) bei GetUserFromAD.Form1.GetInformation (String-ID) in D: \ GetUserFromAD \ GetUserFromAD \ Form1.cs: Zeile 25 um GetUserFromAD.Form1.button_Click (Objekt Absender, EventArgs e) in D: \ Ram \ MyC# \ GetUserFromAD \ GetUserFromAD \ Form1.cs: Linie 35 bei System.Windows.Forms.Control.OnClick (EventArgse) bei System.Windows.Forms.Button.OnMouseUp (MouseEventArgs mevent) bei System.Windows.Forms.Control .WmMouseUp (Message & m, Maustasten Schaltfläche klickt Int32) bei System.Windows.Forms.Control.WndProc (Message & m) bei System.Windows.Forms.ButtonBase.WndProc (Message & m) bei -System. Windows.Forms.Button.WndProc (Nachricht & m) bei System.Windows.Forms.Control.ControlNativeWindow.WndProc (Message & m)
bei System.Windows.Forms.NativeWindow.DebuggableCallback (IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam) bei System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW (MSG & msg)
bei System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop (Int32 DwComponentID, Int32 Grund, Int32 pvLoopData) um System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner (Int32 Grund, ApplicationContext conte xt) um System.Windows.Forms.Application.ThreadContext.RunMessageLoop (Int32 Grund, ApplicationContext-Kontext) bei GetUserFromAD.Program.Main() in D: \ Ram \ MyC# \ GetUserFromAD \ GetUserFromAD \ Program.cs: Zeile 18 bei System.AppDomain._nExecuteAssembly (Montagebaugruppe, String [] args)
bei Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
bei System.Threading.ExecutionContext.Run (ExecutionContext ExecutionContext, Context Rückruf, Object Zustand) um System.Threading.ThreadHelper.ThreadStart()

+0

Ich kenne nicht die genaue Ursache, umgehen kann ich sagen, ist diese Anweisung in einem Batch-Skript und übergeben Sie diese Batch-Skript als Argument an ProcessStartInfo API. – Zenwalker

+0

Bessere Praktiken für den Nettoeinsatz: http://StackOverflow.com/Questions/8919/looking-for-best-practice-for-doing-a-net-use-in-c-sharp – Kiquenet

Antwort

6

net ist der Befehl. Alles von user an sind Befehlsargumente.Als solche müssen Sie den folgenden Konstruktor verwenden:

System.Diagnostics.ProcessStartInfo proccessStartInfo = new System.Diagnostics.ProcessStartInfo("net", "user " + id + " /domain"); 

Zusätzlich, um die Standardausgabe erfassen Sie die folgenden Eigenschaften festlegen müssen, bevor Sie proc.Start()

proc.StartInfo.RedirectStandardOutput = true; 
proc.StartInfo.UseShellExecute = false; 
nennen
+0

Vielleicht Bessere Praktiken für den Nettoeinsatz: http://StackOverflow.com/Questions/8919/Sehen-For-Best-Praxis-for-Doing-A-No-use-in-C-Sharp – Kiquenet

1
System.Diagnostics.ProcessStartInfo proccessStartInfo = new System.Diagnostics.ProcessStartInfo("cmd", "net user " + id + "/domain"); 
1

Sie müssen den Pfad zu net.exe angeben, der sich in einem Systemverzeichnis befindet (d. H. Windows \ system32). Beispiel:

var proccessStartInfo = new System.Diagnostics.ProcessStartInfo(
    Path.Combine(Environment.SystemDirectory, "net.exe"), "user " + id + " /domain"); 

Beachten Sie auch, dass Befehlszeilenargumente als zweiter Parameter übergeben werden.

+1

Während es besser ist, die zu spezifizieren Pfad zu dem Befehl, den Sie verwenden möchten, ist es nicht unbedingt erforderlich, solange der Befehl auf dem Pfad des Benutzers ist. – raveturned