myCSharp.de - DIE C# und .NET Community
Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 
 | Suche | FAQ

» Hauptmenü
myCSharp.de
» Startseite
» Forum
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Suche
» Regeln
» Wie poste ich richtig?
» Forum-FAQ

Mitglieder
» Liste / Suche
» Wer ist wo online?

Ressourcen
» openbook: Visual C#
» openbook: OO
» Microsoft Docs

Team
» Kontakt
» Übersicht
» Wir über uns

» myCSharp.de Diskussionsforum
Du befindest Dich hier: Community-Index » Diskussionsforum » Entwicklung » Basistechnologien und allgemeine .NET-Klassen » Aus C# cmd mit erhöhten Rechten ausführen
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | Thema zu Favoriten hinzufügen

Antwort erstellen
Zum Ende der Seite springen  

Aus C# cmd mit erhöhten Rechten ausführen

 
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
pastors
myCSharp.de-Mitglied

Dabei seit: 12.08.2005
Beiträge: 38


pastors ist offline

Aus C# cmd mit erhöhten Rechten ausführen

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hallo zusammen,
habe ein blödes Problem, denke auch ich weiß woran es liegt, kann es aber nicht alleine lösen.

Also, habe eine Windows GUI geschrieben die mittels "System" laufen muss! Das funktioniert soweit...
Ich möchte nun aber, eine Batch (cmd) aufrufen die mittels reg add Werte in HKLM schreibt.

Mein Code sieht soweit aus:

C#-Code:
Process p = new Process();
p.StartInfo.FileName = @"Batch.bat";
p.StartInfo.WorkingDirectory = Directory.GetCurrentDirectory();
p.Start();
p.WaitForExit();

Die Batch sieht verkürzt so aus:

C#-Code:
reg add HKLM\Software\ESSPrinter /v Dev1 /t REG_SZ /d X50Y23Z87
reg add HKLM\Software\ESSPrinter /v Dev2 /t REG_SZ /d X89Y12Z33
usw.

So, Starte ich das Programm, sehe ich in der Batch die Meldung: "Vorgang erfolgreich ausgeführt". Schaue ich in die Registry rein, sind keine Werte enthalten!
Führe ich die Batch als Administrator aus, sind die Werte in der Registry drin.
Also die Batch für sich funktioniert... aber nicht beim Aufruf mittels dem c# Programm.

Kann mir hierzu jemand weiterhelfen?
30.01.2020 07:00 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
T-Virus T-Virus ist männlich
myCSharp.de-Mitglied

Dabei seit: 17.04.2008
Beiträge: 1.499
Entwicklungsumgebung: Visual Studio, Codeblocks, Edi
Herkunft: Nordhausen, Nörten-Hardenberg


T-Virus ist offline Füge T-Virus Deiner Kontaktliste hinzu

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Warum schreibst du dann nicht direkt aus deinem Programm aus in die Registry.
Mit deinem Batch File öffnest du jedem Zugang zu der lokalen Registry des Rechners.
Halt ich für sehr fatal!

 Registry

T-Virus
30.01.2020 09:59 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Abt
myCSharp.de-Team

avatar-4119.png


Dabei seit: 20.07.2008
Beiträge: 13.819
Herkunft: Stuttgart/Stockholm


Abt ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Zitat von pastors:
Also die Batch für sich funktioniert... aber nicht beim Aufruf mittels dem c# Programm.

Jo, weil das Rechtesystem von Windows so nicht funktioniert.
Die Batch wird in der Form nicht als Admin ausgeführt, daher funktioniert es natürlich auch nicht.

Mach es, wie T-Virus es sagt: direkt über die Anwendung.
30.01.2020 11:21 Beiträge des Benutzers | zu Buddylist hinzufügen
pastors
myCSharp.de-Mitglied

Dabei seit: 12.08.2005
Beiträge: 38

Themenstarter Thema begonnen von pastors

pastors ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

So schlimm ist das mit der Batch nicht. Registry Einträge unter HKLM darf nur ein Administrator Konto oder das System Konto vornehmen.
Der Hintergrund ist etwas schwierig zu erklären... mit der Batch wird eine Maschine gesteuert. Vor ungefähr 15 Jahren dachten die Entwickler der Maschine, es wäre eine gute Idee alles in die Registry zu schreiben anstatt die Koordinaten als textfile abzulegen.
Bisher haben die Mitarbeiter lokale Administratorrechte auf dem System gehabt. Beim letzten Security Audit wurde dies bemängelt.

Also keine Chance aus einem C# Programm eine Batch als Administrator auszuführen ohne die UAC zu deaktivieren?
30.01.2020 12:04 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Abt
myCSharp.de-Team

avatar-4119.png


Dabei seit: 20.07.2008
Beiträge: 13.819
Herkunft: Stuttgart/Stockholm


Abt ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

UAC ist nochmal ein ganz anderer Stiefel.

C#-Code:
     Arguments = "/user:Administrator \"cmd /K " + command + "\""

Willst Du den Admin mitgeben, dann musst Du das über die Start Arguments der ProcessInfo mitgeben.

Verstehe aber nicht, wieso Du es nicht einfach über .NET machst.
Dann brauchst den Batch Quatsch nicht und kannst die Rückgabe auch sauber auswerten.
30.01.2020 12:08 Beiträge des Benutzers | zu Buddylist hinzufügen
Th69
myCSharp.de-Poweruser/ Experte

avatar-2578.jpg


Dabei seit: 01.04.2008
Beiträge: 3.580
Entwicklungsumgebung: Visual Studio 2015/17


Th69 ist online

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Mit  runas als Command kannst du das Batch-File unter einem anderen User (mit erhöhtem Rechten) ausführen - es wird aber nach dem Passwort gefragt.
30.01.2020 12:11 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
UncleBens
myCSharp.de-Mitglied

avatar-332.jpg


Dabei seit: 14.02.2009
Beiträge: 134
Entwicklungsumgebung: Visual Studio 2019 Enterprise


UncleBens ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Zitat von T-Virus:
Mit deinem Batch File öffnest du jedem Zugang zu der lokalen Registry des Rechners.
Halt ich für sehr fatal!

Nö... inwiefern sollte das der Fall sein?
Um nach HKLM schreiben zu können, muss das Batch-File mit administrativen Rechten ausgeführt werden. Wenn Du die hast, kannste genauso gut regedit mit administrativen Rechten starten.

Ansonsten hast Du aber natürlich Recht, der Weg über ein cmd-File um RegKeys zu setzen wirkt ein bissl wie von hinten durch die Brust :-)
30.01.2020 12:16 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
UncleBens
myCSharp.de-Mitglied

avatar-332.jpg


Dabei seit: 14.02.2009
Beiträge: 134
Entwicklungsumgebung: Visual Studio 2019 Enterprise


UncleBens ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Zitat von pastors:
Also keine Chance aus einem C# Programm eine Batch als Administrator auszuführen ohne die UAC zu deaktivieren?

Eine Option (ob's nun schön ist oder nicht kann man sicher drüber diskutieren) wäre noch:
Du kannst via regedit auf Registry-Keys Rechte vergeben (ähnlich wie bei Ordnern im Dateisystem, nur hier eben auf Registry-Keys).
Wenn es um HKLM\Software\ESSPrinter geht, könntest Du auf den ESSPrinter-Key (auf keinen Fall auf Software oder höher Achtung ) der Users-Gruppe Schreibrechte geben.

Inwiefern das ein Sicherheitsrisiko für Deine Anwendung darstellt, wenn jeder Benutzer sich in diesem Key austoben kann, musst Du selbst beurteilen.
30.01.2020 12:27 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
T-Virus T-Virus ist männlich
myCSharp.de-Mitglied

Dabei seit: 17.04.2008
Beiträge: 1.499
Entwicklungsumgebung: Visual Studio, Codeblocks, Edi
Herkunft: Nordhausen, Nörten-Hardenberg


T-Virus ist offline Füge T-Virus Deiner Kontaktliste hinzu

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

@UncleBens
Da die Batch Datei als Admin ausgeführt werden soll, würde er jedem die Möglichkeit geben, dort alle Befehle als Admin ausführen zu lassen.
Du kannst dir dann z.B. einen neuen Admin User anlegen, wenn das Skript einmal durchgelaufen wurde und hast vollen Zugriff auf das System.
Oder du liest einfach mal das ganze System aus und lässt die Daten übers Netz abfließen.
Gibt hier genug Möglichkeiten um Schaden anzurichten!

Man sollte NIE aus einem Programm mit Adminrechten irgendwelche lokalen Batch Files starten lassen!
Damit schreit man förmlich danach, dass man sein System gefährden will.

Bei einem Sicherheitsaudit, würde auch da bei jedem seriösen Auditor die Alarmglocken leuten!

T-Virus

Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von T-Virus am 30.01.2020 13:19.

30.01.2020 13:17 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Abt
myCSharp.de-Team

avatar-4119.png


Dabei seit: 20.07.2008
Beiträge: 13.819
Herkunft: Stuttgart/Stockholm


Abt ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Zitat von T-Virus:
Da die Batch Datei als Admin ausgeführt werden soll, würde er jedem die Möglichkeit geben, dort alle Befehle als Admin ausführen zu lassen.

Nein. Aus Rechtesicht ist es irrelevant ob hier die .NET oder die CMD Anwendung die Rechte hat.
Ein normaler User kann ohne Adminrechte niemals eine Batch starten, die dann Regedit-Operationen durchführt, auf die er kein Access hat.
Dazu ist egal bei welcher Anwendung ein administratives Recht notwendig.

Die einzige Sache ist, dass die Batch an für sich verändert werden kann, und so andere Befehle als gewünscht als Admin ausgeführt werden können.
Das ist aber an für sich irrelevant, wenn der User so oder so Adminrechte hat.

Ein Benutzer, der keine Adminrechte hat, kann so oder so damit nichts verändern.

Zitat von T-Virus:
Bei einem Sicherheitsaudit, würde auch da bei jedem seriösen Auditor die Alarmglocken leuten!

Nö. Der interessiert sich für sowas gar nicht.
Einen Auditor interessiert das Sicherheits- und Rechtekonzept im Ganzen; nicht wie Batch Dateien ausgeführt werden.

Auch Deine dramatische Ausdrucksweise ändert daran nichts :-)
30.01.2020 13:22 Beiträge des Benutzers | zu Buddylist hinzufügen
pastors
myCSharp.de-Mitglied

Dabei seit: 12.08.2005
Beiträge: 38

Themenstarter Thema begonnen von pastors

pastors ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Um kurz mal die Brisants aus dem Thema zu nehmen.
Das C# .Net Programm wird bereits beim Starten des System als "System" User gestartet. Die Batchdatei liegt in einem Ordner, in dem ein User keine Rechte hat, nichtmal lesen!
Unser Security Auditor hat das Konstrukt abgesegnet und somit ist das ok.

Mein Ziel ist es, da das C# Programm bereits mit dem System-Account gestartet ist, das Batchfile ebenfalls mit dem System-Account zu starten. So wie es aussieht, verwendet Windows über Process Start(); einen anderen Account.
Ist das technisch möglich?

Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von pastors am 30.01.2020 14:30.

30.01.2020 14:30 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Abt
myCSharp.de-Team

avatar-4119.png


Dabei seit: 20.07.2008
Beiträge: 13.819
Herkunft: Stuttgart/Stockholm


Abt ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Wie bereits gesagt; so funktioniert nun mal das Windows Rechtesystem nicht.
Du musst beim Start aktiv mitgeben, in welchem Kontext die Anwendung gestartet werden muss.
Das passiert nicht automatisch - und das ist bewusst so.
30.01.2020 14:48 Beiträge des Benutzers | zu Buddylist hinzufügen
Baumstruktur | Brettstruktur       | Top 
myCSharp.de | Forum Der Startbeitrag ist älter als 3 Monate.
Der letzte Beitrag ist älter als 3 Monate.
Antwort erstellen


© Copyright 2003-2020 myCSharp.de-Team | Impressum | Datenschutz | Alle Rechte vorbehalten. | Dieses Portal verwendet zum korrekten Betrieb Cookies. 28.05.2020 14:42