Hallo!
Ich habe ein Programm welches Daten aus einem Ordner anzeigt und dort auch welche hinschreibt. Der Pfad zu dem Ordner steht in der Registry und wird stumpf genutzt (mit Hilfe von Path.Exists etc.).
C:\Pfad\Ordner
Nun sollen diese Daten auch auf einem Rechner im Netzwerk liegen. also den Ordner mit Lese-/Schreibrechten freigeben und in der Registry folgendes ändern:
\\Rechnername\Pfad\Ordner
Was muss ich dort allerdings eintragen, wenn der Rechner in einer anderen Domäne ist und ich nur mit "Domäne\Benutzername" und dem Passwort darauf zugreifen kann?
Hallo,
2 Möglichkeiten:
net use SERVERNAME\IPC$ /user:USERNAME PASSWORD
// unter Verwendung von Process
verbinden und anschliessend Dateioperationen auf das LW ausführen
Ich verstehe nicht ganz was du mit ändern in der Registry meinst.
**:::
huhu,
wenn dein Programm von einem Benutzer ausgeführt wird, dann gelten als erstes die Rechte des Benutzers für diese Freigabe. Wenn es also ein Domänen-Benutzer ist und Lese/Schreib-Rechte auf diesen Ordner hat, dann sollte alles ohne Programmänderung funktionieren.
Wenn das nicht der Fall ist - also Benutzer nicht in Domäne, Rechner nicht in Domäne, keine Rechte - dann muss dem Server (mit der Freigabe) eine entsprechende Berechtigung übergeben werden.
Ich würde von den Möglichkeiten die Dir vbprogger nannte, Impersonation wählen, dann kann man dem Benutzer auch anch Benutzername Kennwort fragen.
😃
Xynratron
Herr, schmeiss Hirn vom Himmel - Autsch!
Die Erfahrung zeigt immer wieder, dass viele Probleme sich in Luft auslösen, wenn man sich den nötigen Abstand bzw. Schlaf gönnt.
Ich hätte da noch ein paar Anmerkungen zu dem Thema:
a) Der Komanndozeilenaufruf von net use kann auch über die Windows-API gemacht werden (Stichwort NetUseAdd )
b) Der Hinweis von Xynratron, dass Dein Programm erst mal im Kontext des angemeldeten Users läuft ist durchaus korrekt - aber genau das kannst Du auch zu Deinem Vorteil nutzen. Wenn Du einen anderen Benutzer zur Authentifizierung nutzen willst, kannst Du dessen Zugangsdaten für den gewünschten Server in den gespeicherten Netzwerkkennwörtern hinterlegen.
c) Du kannst natürlich auch Dein Programm im Kontext eines anderen Benutzers laufen lassen (z.B. via RunAs) und damit die Anmeldung am Server in dessen Kontext durchführen
Bart Simpson
Praxis ist wenn alles funktioniert und keiner weiss warum.
Theorie ist wenn man alles weiss, aber nichts funktioniert.
Bei uns wird Theorie und Praxis vereint: Nichts funktioniert und keiner weiss warum...
Hallo,
würde mich hier einfach mal anschließen wollen.
Folgendes Szenario:
AnwendungA liegt auf einem Netzlaufwerk und kann nur mit Administratorrechten gestartet werden
AnwendungB startet AnwendungA (liegt im selben Verzeichnis via Process.Start() und zugewiesenem Usernamen/Passwort mit lokalem Administrator-Konto
-> Verzeichnisname ist ungültig
Hier dachte ich, dass es evtl. daran liegt, dass der lokale Administrator keine Berechtigung auf das Netzlaufwerk hat, mit dem Domänenadministrator funktioniert es aber ebenfalls nicht...
Gut, dachte ich:
-> Verzeichnisname ist ungültig,
obwohl die Schreibzugriffe vorher durchgelaufen sind.
Es ist also scheinbar NICHT möglich den Ausführungskontext zu wechseln:
Lokal -> Remote bzw. Remote -> Lokal
Hat jemand eine Idee??
Der Kern sieht so aus:
string AdminDomain = "";
string AdminUser = "Administrator";
string AdminPwd = "pass";
SecureString AdminPwdSecure = new SecureString();
ProcessStartInfo p = new ProcessStartInfo();
if (AdminDomain.Trim() == "")
AdminDomain = SystemInformation.ComputerName.ToString();
foreach (char chr in AdminPwd.ToCharArray())
AdminPwdSecure.AppendChar(chr);
p.FileName = appPath;
p.Domain = AdminDomain;
p.UserName = AdminUser;
p.Password = AdminPwdSecure;
// Muss für die Ausführung unter einem anderem User auf false stehen.
p.UseShellExecute = false;
Process.Start(p);