Autor Beitrag
A3eXy
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 25



BeitragVerfasst: Di 02.02.10 16:50 
Hallo Zusammen,

Ich suche schon eine weile nach einer möglichkeit mein Programm als anderer Benutzer zu starten.
Leider krieg ich es nicht hin.

Ich würde gerne das wenn man mein Programm startet ein Login fenster startet,
bei dem man nun den Benutzer und das PW eingeben muss.

Der Benutzer existiert in der gleichen Domäne, also bräuchte ich ein "normaler" Windows-Login wie halt Ausführen als...
Könntet Ihr mir sagen wie man das realisieren könnte?

Hab mit google leider nicht wirklich was hilfreiches gefunden...

Vielen Dank für jegliche Antworten :)

mfg
danielf
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1012
Erhaltene Danke: 24

Windows XP
C#, Visual Studio
BeitragVerfasst: Di 02.02.10 17:14 
Hallo,

ich denke das funktioniert nur über einen zweites Ausführen.

Sprich du startest deine Applikation die ein Form anzeigt bei der man die Logindaten angibt. Aus diesem Prozess startest du dann den Befehl runas mit den jeweiligen Parametern und deiner endgültigen Anwendung.

Falls du nicht gleich mit Rechtsklick runas machen willst :)

Gruß Daniel

PS: Wegen dem Passwort mitgeben, bzw. wie es abgefragt wird weiß ich nicht. Aber da findest du bestimmt etwas im Netz über den runas befehl.


EDIT:
Bäh pfui... so machst du es natürlich nicht.

Sondern:
Du verwendest die StartInfo eines Prozess anstatt das "blöde" runas :)
A3eXy Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 25



BeitragVerfasst: Di 02.02.10 17:26 
Danke für die Schnell Antwort,

über zweites Ausführen meinst du damit eine 2. *.exe?

das Problem mit Run As ist, wenn jemand schon (Lokaler)Administrator ist und man startet Ausführen als...
Kommt nur eine Bestätigung.

Ich will aber das man den Benutzer eingeben muss...

Ich hab schon eine *.cmd geschrieben die es mir als anderer User ausführt, dann funktioniert das Tool aber nicht ganz richtig.

Edit: Ich versuchs mal mit StartInfo :-)
JüTho
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2021
Erhaltene Danke: 6

Win XP Prof
C# 2.0 (#D für NET 2.0, dazu Firebird); früher Delphi 5 und Delphi 2005 Pro
BeitragVerfasst: Di 02.02.10 18:54 
Hallo,

warum willst du nicht in die program.cs innerhalb der Main-Methode das Login-Formular aufrufen und nur im Erfolgsfall mit Application.Run zum Hauptformular wechseln? Gibt das irgendwelche Probleme mit der Domäne usw.?

Gruß Jürgen
A3eXy Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 25



BeitragVerfasst: Di 02.02.10 19:15 
Doch genau DAS bräuchte ich^^

Bin leider noch Anfänger mit C#, kannst du mir vielleicht sagen wie ich das Login Fenster kreieren kann?
bzw. wie zu Programmieren?
JüTho
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2021
Erhaltene Danke: 6

Win XP Prof
C# 2.0 (#D für NET 2.0, dazu Firebird); früher Delphi 5 und Delphi 2005 Pro
BeitragVerfasst: Di 02.02.10 20:36 
Hallo,

das Login-Formular wird wie jedes Formular in der IDE erstellt und mit der nötigen Funktionalität versehen. In der Main-Methode sieht es vereinfacht so aus:
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
string username = String.Empty;
using( LoginForm form = new LoginForm() ) {
   if (form.ShowDialog() == DialogResult.OK)
       username = form.Username; 
}
if (! String.IsNullOrEmpty(username) ) {
   MainForm main = new MainForm();
   main.Username = username;
   Application.Run(main);
}

Gruß Jürgen
A3eXy Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 25



BeitragVerfasst: So 14.02.10 21:49 
sry, für die Verspätete Rückmeldung hatte letzter Zeit nicht so viel Zeit.

Also in deinem Beispiel code was ist den LoginForm und MainForm?
Weiss jetzt iwie immer noch nicht wie ich das genau angehen kann...

Kannst du mir das vl ein bisschen genauer erklären?


Vielen Dank
JüTho
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2021
Erhaltene Danke: 6

Win XP Prof
C# 2.0 (#D für NET 2.0, dazu Firebird); früher Delphi 5 und Delphi 2005 Pro
BeitragVerfasst: So 14.02.10 22:45 
Hä? Was ist daran nicht zu verstehen?
user profile iconA3eXy hat folgendes geschrieben Zum zitierten Posting springen:
Also in deinem Beispiel code was ist den LoginForm

Das ist das Formular, das das Login abfragt, prüft und das Ergebnis festhält. Es ist eine von Form abgeleitete Klasse.

user profile iconA3eXy hat folgendes geschrieben Zum zitierten Posting springen:
und MainForm?

Das ist das Hauptformular (main = haupt, form = formular), das die eigentliche Anwendung steuert. Auch das ist eine von Form abgeleitete Klasse.

user profile iconA3eXy hat folgendes geschrieben Zum zitierten Posting springen:
Kannst du mir das vl ein bisschen genauer erklären?

Anders als so kann ich es nicht erklären:
user profile iconJüTho hat folgendes geschrieben Zum zitierten Posting springen:
das Login-Formular wird wie jedes Formular in der IDE erstellt und mit der nötigen Funktionalität versehen.

user profile iconA3eXy hat folgendes geschrieben Zum zitierten Posting springen:
Ich würde gerne das wenn man mein Programm startet ein Login fenster startet, bei dem man nun den Benutzer und das PW eingeben muss.

Unter Windows (window = fenster) wird ein Fenster durch ein Formular dargestellt. Das, was du hier wolltest (nämlich ein Login fenster), habe ich als LoginForm bezeichnet.

Tut mir leid, ich bin zu dämlich für andere Erläuterungen. Jürgen
A3eXy Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 25



BeitragVerfasst: So 14.02.10 23:37 
Danke für die Ausführliche Antwort, habs aber eigentlich nicht so gemeint.

Meine Schuld sollte meine Fragen besser stellen^^


Kenn mich leider noch nicht sehr gut mit C# aus :-\
Ich versteh schon was du mit MainForm etc. meinst,
nur das mit den Klassen hab ich nicht so.

Ich habe in meinem Projekt jetzt 2 Forms (Login & Main)

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
 public partial class Form1 : Form
 {
 }

public partial class Form2 : Form
 {
 }


Wenn jetzt Form2 ausgeführt wird (Login),
wie wird nachher die MainForm mit dem Admin account ausgeführt?
nach deinem Beispiel:
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
if (! String.IsNullOrEmpty(username) ) {
   MainForm main = new MainForm();
   main.Username = username;
   Application.Run(main);
}


Jetzt gibts du dem Objekt main die notwendigen Parameter mit, ich denke ich müsste noch.
main.Password = Password; hinzufügen

Wenn ich aber in meinem Login
ausblenden C#-Quelltext
1:
MainForm main = new MainForm;					


Sagt er mir, Der Typ- oder Namespacename "Mainform" konnte nicht gefunden werden.

Using System.Windows.Forms; hab ich aber drin.

Ich denke das ist ein sehr dummer Fehler von mir, weil ich da irgendwas falsch verstehe oder etwas nicht hinzufüge :s

So hoffe du verstehst jetzt was ich meine :)
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19312
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Mo 15.02.10 09:47 
Das wird so nicht klappen. Es ist aus Sicherheitsgründen nicht möglich die Privilegien eines Programmes nach dessen Start zu verändern.

Heißt: Entweder du startest die eigene Exe mit dem Login einfach noch einmal oder (sehr kompliziert) du startest einen Out-of-Process COM-Server mit diesem Login und regelst die Kommunikation damit ggf. via IPC.

Ich rate dazu einfach die Exe noch einmal zu starten, wenn ohnehin das ganze Programm mit diesen Zugriffsrechten laufen soll, da sparst du dir viel Arbeit. Wenn du dir einmal Process.Start anschaust, dann siehst du, dass es diese Überladung gibt:
msdn.microsoft.com/d...ibrary/sxf2saat.aspx
Der übergibst du einfach neben deiner Exe als zu startendes Programm noch die Logindaten und das wars.
A3eXy Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 25



BeitragVerfasst: Mo 15.02.10 11:19 
Hmm, okay. Kann ich das auch irgendwie alles in einer exe ausführen?
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19312
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Mo 15.02.10 11:51 
Wie gesagt: Du kannst die eigene Exe ein zweites Mal starten. Mit einem Parameter um das der neuen Instanz auch mitzuteilen zum Beispiel.

Deinen eigenen Prozess unter einer anderen Benutzerkennung mit anderen Privilegien anzumelden ist wirklich gar nicht möglich.
A3eXy Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 25



BeitragVerfasst: Mo 15.02.10 19:13 
Funktioniert ja Wunderbar :D

Vielen Vielen Dank :)