ubuntuusers.de

Aus einem Programm (C# oder C++) ein Shellskript starten

Status: Ungelöst | Ubuntu-Version: Ubuntu 9.04 (Jaunty Jackalope)
Antworten |

Developer92 Team-Icon

Avatar von Developer92

Anmeldungsdatum:
31. Dezember 2008

Beiträge: 4101

Also ich denke, der Titel sagts schon aus. Ich würde nämlich gerne aus einem Programm heraus, wahlweise in C#, notfalls auch in C++ ein Shellskript starten. Am liebsten wäre es mir aber, einen Befehl für die BASH direkt ausführen zu können, aber ich denke mal, dass das nicht geht. Welcher Befehl ausgeführt wird, ist vollkommen egal, ich hab nämlich mehrere davon im Angebot. Aber von mir aus machen wir einfach ein "apt-get update" 😀

Ich hoffe, mir kann jemand helfen.

mfg Floh

Kinch

Anmeldungsdatum:
6. Oktober 2007

Beiträge: 1261

Die Systemcalls sind entweder "system" oder eine Kombi aus "execv" und "fork". Ich denke mal in C# werden sie ähnlich heißen. Damit kannst du dann auch direkt Shell-Befehle ausführen.

Lysander

Avatar von Lysander

Anmeldungsdatum:
30. Juli 2008

Beiträge: 2669

Wohnort: Hamburg

Wobei man zunächst einmal gucken sollte, ob es nicht native Bindings für solche Calls gibt. Wenn ja, sollte man direkt über die API auf die Funktionalität zugreifen - bietet viele Vorteil gegenüber einem System-Call.

Hello_World

Anmeldungsdatum:
13. Juni 2006

Beiträge: 3620

TDeveloper schrieb:

Also ich denke, der Titel sagts schon aus. Ich würde nämlich gerne aus einem Programm heraus, wahlweise in C#, notfalls auch in C++ ein Shellskript starten. Am liebsten wäre es mir aber, einen Befehl für die BASH direkt ausführen zu können, aber ich denke mal, dass das nicht geht.

Doch, natürlich geht das. Nur will man das in den meisten Fällen eigentlich gar nicht. Leider beschreibst Du in Deinem Posting nicht das zu lösende Problem, sondern das, was Du für die Lösung hältst. Folglich ist es schwer, bessere Alternativen für system(3) usw. aufzuzeigen.

Developer92 Team-Icon

(Themenstarter)
Avatar von Developer92

Anmeldungsdatum:
31. Dezember 2008

Beiträge: 4101

Ja, also gestern hatt ich Ubuntu grad nicht an, da konnte ich auch nicht nachschauen, welche Befehle es denn genau wären. Ich will das ganze halt unter einer schönen Oberfläche haben. Befehle wären dann mal:

DVB-T-Funktion installieren:

sudo apt-get install dvb-utils

Dann Systemupdate:

sudo apt-get update && sudo apt-get upgrade && sudo apt-get dist-upgrade && sudo apt-get autoremove && sudo apt-get autoclean

Und dann noch FLASH-reparieren, da hab ich aber grad den Befehl nicht. Zudem brauch ich noch etwas, um cups abschalten zu können (und auch wieder ein) und um bei mir das Herunterfahren zu "reparieren" (einfach acpi=on als Bootparameter hinzufügen)

Das wars soweit ☺

Hoffe, ihr könnt mir dazu noch ein wenig mehr helfen

mfg Floh

Bratwurstler

Avatar von Bratwurstler

Anmeldungsdatum:
14. Oktober 2007

Beiträge: 146

Wohnort: Berlin

Müsste man für die sudo-Befehle nicht PolicyKit über D-Bus ansprechen?

http://www.murrayc.com/blog/permalink/2008/02/07/gnome-lirc-properties-using-policykit-to-get-sudo-access/

Nur so'n Gedanke, noch nie gemacht. Vielleicht bringts dir ja was. ☺

AdrianB Team-Icon

Avatar von AdrianB

Anmeldungsdatum:
23. August 2005

Beiträge: 6565

Wohnort: Berlin

Um einen Prozess mit Mono auszuführen gibt es 2 Wege, einmal per C# Eigner API: http://www.codeproject.com/KB/cs/Execute_Command_in_CSharp.aspx

oder per syscall im Namespace Mono.Unix.Native.Syscall. Was besser ist weiß ich nicht aber beides geht.

gruß Adrian

Lunar

Anmeldungsdatum:
17. März 2006

Beiträge: 5792

@Bratwurstler: PolicyKit hat nichts mit sudo zu tun, beide Programme lösen völlig unterschiedliche Problemstellungen. sudo löst das Problem, wie ein Nutzer zu einem anderen Nutzerkonto wechseln kann, um Programme ausführen zu können, deren Aktionen ggf. bestimmte Rechte erfordern. Im PolicyKit-Szenario dagegen läuft das Programm, dass eine bestimmte Aktion durchführt, bereits mit dem nötigen Rechten. Allerdings muss das Programm Anfragen nicht privilegierter Benutzerkonten prüfen, ob sie autorisiert sind.

Mit sudo kann ein Nutzer sich Root-Rechte verschaffen, mit PolicyKit dagegen kann er nur bereits laufenden Root-Programmen beweisen, dass er autorisiert ist, eine bestimmte Aktion durchführen zu dürfen.

Bratwurstler

Avatar von Bratwurstler

Anmeldungsdatum:
14. Oktober 2007

Beiträge: 146

Wohnort: Berlin

Gut zu wissen, danke Lunar.

Aber in diesem konkreten Fall hier - klappt das denn überhaupt mit sudo? Müsste das dann denn nich eher gksu sein?! =S

Jens

Lunar

Anmeldungsdatum:
17. März 2006

Beiträge: 5792

Das hängt davon ab, in welcher Umgebung das fertige Programm laufen soll. Auf einem Terminal funktioniert sudo schon.

Developer92 Team-Icon

(Themenstarter)
Avatar von Developer92

Anmeldungsdatum:
31. Dezember 2008

Beiträge: 4101

Also danke erstmal. Die Oberfläche wird natürlich grafisch. Sonst bräuchte ich das Prog ja nicht schreiben. Aber natürlich könnte ich es gleich mit gksu öffnen (ist übrigens für Ubuntu gedacht).

Also mkdir geht mit Mono.Unix.Native.Syscall wunderbar.

Nur was mich jetz noch interessieren würde ist, wie ich den "sudo apt-get update"-Befehl ausführen kann bzw. allgemein Shell-Befehle.

Aber trotzdem nochmal vielen Dank bis hierher! ☺

mfg Floh

Lunar

Anmeldungsdatum:
17. März 2006

Beiträge: 5792

@TDeveloper: Lies die Dokumentation und die Beiträge in dieser Diskussion. Vier Beiträge über Deinem hat AdrianB ein Beispiel verlinkt, dass Dir zeigt, wie man Prozesse (und somit auch Shell-Kommandos) mit C# startet. Außerdem hat die Standard-Dateisystem-API von C# bestimmt eine komfortable Möglichkeit, Verzeichnisse zu erzeugen, dafür musst Du nicht auf den Syscall zurückgreifen.

Developer92 Team-Icon

(Themenstarter)
Avatar von Developer92

Anmeldungsdatum:
31. Dezember 2008

Beiträge: 4101

Aber das startet doch nur eine cmd. Und ich bin ja unter Ubuntu. Da brauch ich eine BASH. Und ausserdem hab ich des ned ganz verstanden, wie des dann genau laufen soll.

Und ja, es gibt abhilfe für mkdir, aber es ist trotzdem schön, wenns funktioniert.

mfg Floh

Lunar

Anmeldungsdatum:
17. März 2006

Beiträge: 5792

@TDeveloper: Man benötigt keine Shell, um Programme auszuführen. Der gezeigte Code ist auch keinesfalls Windows-spezifisch, sondern sollte unter Mono exakt genauso funktionieren. Wenn Du den Ablauf nicht ganz verstanden hast, dann lies die Dokumentation zu den im diesem Beispiel vorkommenden Klassen.

Developer92 Team-Icon

(Themenstarter)
Avatar von Developer92

Anmeldungsdatum:
31. Dezember 2008

Beiträge: 4101

OK, dann probier ich das einfach mal aus, wenn ich wieder unter Ubuntu bin. mfg floh

EDIT: Hat irgendwie ned funktioniert.

Antworten |