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
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
(Themenstarter)
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
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
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
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
(Themenstarter)
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
(Themenstarter)
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
(Themenstarter)
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.
|