Laden...

Zugriff auf Freigabe in Domäne

Erstellt von Froggie vor 13 Jahren Letzter Beitrag vor 13 Jahren 6.678 Views
F
Froggie Themenstarter:in
323 Beiträge seit 2007
vor 13 Jahren
Zugriff auf Freigabe in Domäne

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?

1.696 Beiträge seit 2006
vor 13 Jahren

Hallo,

2 Möglichkeiten:

  1. vorher mit
net use SERVERNAME\IPC$ /user:USERNAME PASSWORD

// unter Verwendung von Process

verbinden und anschliessend Dateioperationen auf das LW ausführen

  1. schau dir Impersonation mal an: http://msdn.microsoft.com/en-us/library/5z4b2h41 - es ist etwas komplizierter aber eleganter.

Ich verstehe nicht ganz was du mit ändern in der Registry meinst.

Ich bin verantwortlich für das, was ich sage, nicht für das, was du verstehst.

**:::

X
1.177 Beiträge seit 2006
vor 13 Jahren

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.

502 Beiträge seit 2004
vor 13 Jahren

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...

185 Beiträge seit 2007
vor 13 Jahren

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:

  • AnwendungB KOPIERT das gesamte Programmverzeichnis (Application.StartupPath) in %temp%\AppName und startet DORT AnwendungA mit den Administratorrechten

-> 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);