2016-09-01 4 views
0

Ich habe ein Hilfsprogramm geschrieben, das verschiedene Aufgaben ausführt. Eine der Aufgaben besteht darin, ein Windows Explorer-Fenster lokal zu öffnen und auf einen PC im Netzwerk zu zeigen. So etwas wie das manuelle Öffnen von Windows Explorer und die Eingabe eines Netzwerkverzeichnisses im Pfad \\ 192.168.201.111 \ c $.C# Öffnen Sie Windows Explorer an einem angegebenen Netzwerkstandort mit Netzwerk-Anmeldeinformationen

Ich habe dies getan mit der in Process-Klasse gebaut:

var processInfo = new ProcessStartInfo 
{ 
    Arguments = GetFullPathCDRive(), /*This results in something like:  \\192.168.202.179\c$*/ 
    FileName = "explorer.exe", 
    UserName = Username, 
    Password = GetPasswordAsSecureString(), 
    Domain = Domain, 
    UseShellExecute = false, 
}; 
Process.Start(processInfo); 

Dieser Code funktioniert gut, wenn ich den Benutzernamen und das Passwort ein Eintrag aus dem Process Objekt entfernen (unter der Annahme i bereits zu diesem Speicherort im Netzwerk durchsucht haben und gespeichert den Benutzernamen und das Passwort) aber funktioniert nicht mehr, wenn ich es hinzufüge. Wenn ich versuche, und den Benutzernamen und das Passwort angeben wirft es eine Ausnahme mit dem folgenden Fehler, obwohl der Benutzername und das Passwort korrekt sind:

{ „Anmeldung fehlgeschlagen: Unbekannter Benutzername oder falsches Passwort“}

Hat jemand Irgendeine Idee, warum ich diese Ausnahme bekomme? Sollte ich versuchen, dies anders zu erreichen, d. H. Die eingebaute C# -Prozessklasse nicht zu verwenden, vielleicht einige zugrundeliegende Windows-Aufrufe zu verwenden?

Die GetPasswordAsSecureString-Funktion ist wie folgt, wenn es hilft. Ich verwende diese in einem Passwort-String zu übergeben und das Rück mir eine Secure, die von der Klasse Process erforderlich:

public SecureString GetPasswordAsSecureString() 
{ 
    if (Password == null) 
     throw new ArgumentNullException("password"); 

    var securePassword = new SecureString(); 

    foreach (char c in Password) 
     securePassword.AppendChar(c); 

    securePassword.MakeReadOnly(); 
    return securePassword; 
} 

Vielen Dank im Voraus für jede Hilfe oder Beratung.

Grüße

Antwort

0

Ich konnte nicht einen Weg vorbei den Benutzernamen und das Passwort finden, wenn Windows Explorer öffnen, aber ich wollte meine Lösung schreiben, die ich mit am Ende ging, falls es jemand anderes hilft.

Um dies zu beheben, habe ich die Credential Management-Bibliothek verwendet, um die Anmeldeinformationen vor dem Öffnen des Explorers dem Windows Credential Manager hinzuzufügen. Dies hat den gleichen Effekt, als wenn Sie vorher den Netzwerkpfad erkundigen und die Anmeldeinformationen hinzufügen, wenn Sie dazu aufgefordert werden.

using CredentialManagement; 

return new Credential 
{ 
    Target = target, 
    Type = CredentialType.DomainPassword, 
    PersistanceType = PersistanceType.Enterprise, 
    Username = string.Format("{0}\\{1}", NetworkManager.DOMAIN, username), 
    Password = password, 
}.Save(); 

Dank

Verwandte Themen