Standardmäßig erhält jeder Prozess, den Sie durch Process.Start()
starten, das gleiche Arbeitsverzeichnis wie Ihre Anwendung. Die dsmod.exe
-Datei befindet sich höchstwahrscheinlich in System32
, Sie müssen also das Arbeitsverzeichnis des neuen Prozesses so einstellen, dass es die Datei findet.
Dim psi As New ProcessStartInfo("cmd.exe", "/k dsmod user " & """" & "CN=admin,OU=Admins,OU=Users,DC=DOMAIN,DC=LOCAL" & """" & " -pwd " & TextBox1.Text)
psi.WorkingDirectory = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Windows), "System32")
Process.Start(psi)
nahm ich auch die Freiheit, die zusätzlichen doppelten Anführungszeichen Entfernen Sie am Ende der Argumente, da es keine passenden Start Zitat hatte.
HINWEIS: Da das System-Ordner auf einem anderen Laufwerk als der C:\
Laufwerk befinden könnte ich diesen Code verwendet:
Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Windows), "System32")
, um dynamisch den System32
Ordner des aktuellen Systems zu erhalten. Wenn beispielsweise das Systemlaufwerk den Buchstaben D:\
hat, gibt dieser Code D:\Windows\System32
zurück.
EDIT:
Es scheint, dass dsmod
nur in dem 64-Bit-Systemverzeichnis verfügbar ist. Wenn Ihre Anwendung eine 32-Bit-Anwendung ist, startet sie auch eine 32-Bit-Version von CMD (befindet sich in SysWOW64
). Sie müssen daher die 64-Bit-Version im Verzeichnis System32
öffnen. Um dies zu tun, müssen Sie den vollständigen Pfad von CMD angeben, aber im Verzeichnis Sysnative
.
Durch Angabe von Sysnative
anstelle von System32
verhindern Sie, dass das System Sie in das Verzeichnis SysWOW64
für Ihre 32-Bit-App umleitet.
Dim CmdPath As String = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Windows), If(Environment.Is64BitProcess OrElse Environment.Is64BitOperatingSystem = False, "System32", "Sysnative"), "cmd.exe")
Dim psi As New ProcessStartInfo(CmdPath, "/k dsmod user " & """" & "CN=admin,OU=Admins,OU=Users,DC=DOMAIN,DC=LOCAL" & """" & " -pwd " & TextBox1.Text)
psi.WorkingDirectory = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Windows), "System32")
Process.Start(psi)
Es ist die Art von Befehl, der nur als 64-Bit-Programm verfügbar ist. Wählen Sie Projekt> Eigenschaften> Registerkarte Übersetzen, deaktivieren Sie das Kontrollkästchen "32-Bit bevorzugen". Die Dokumente erwähnen, dass UAC-Erhöhung erforderlich ist, https://Stackoverflow.com/a/2818776/17034 –