ubuntuusers.de

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

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

AdrianB Team-Icon

Avatar von AdrianB

Anmeldungsdatum:
23. August 2005

Beiträge: 6565

Wohnort: Berlin

TDeveloper schrieb:

EDIT: Hat irgendwie ned funktioniert.

Was klappt den nicht? Ich habe immer schön Thunar geöffnet und das geht wie folgt

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
using System;

namespace Progöffnen
{
	class MainClass
	{
		public static void Main(string[] args)
		{
			//per Mono.Unix.Native.Syscall im Assembly Mono.Posix
			Mono.Unix.Native.Syscall.execv("/usr/bin/thunar", args);

			//Startet ein Programm mit den default Mitteln von .net
			System.Diagnostics.ProcessStartInfo procStartInfo =
				new System.Diagnostics.ProcessStartInfo("/usr/bin/thunar");
			
			procStartInfo.RedirectStandardOutput = true;
			procStartInfo.UseShellExecute = false;
			
			System.Diagnostics.Process proc = new System.Diagnostics.Process();
			proc.StartInfo = procStartInfo;
			proc.Start();
		}
	}
}

aus nur irgendeinen Grund öffnet er Thunar nur 1mal.

Lunar

Anmeldungsdatum:
17. März 2006

Beiträge: 5792

@AdrianB: RTFM! execv() lädt die ausführbare Datei in den aktuellen Prozess und führt sie aus. Diese Funktion kehrt nicht zurück, das ursprüngliche Programm läuft nicht weiter. Um ein neuen Prozess zu erzeugen, muss dem execv()-Aufruf ein fork()-Aufruf vorangehen.

Developer92 Team-Icon

(Themenstarter)
Avatar von Developer92

Anmeldungsdatum:
31. Dezember 2008

Beiträge: 4101

OK, das funktioniert soweit. Ich kann zum Beispiel nautilus öffnen oder so. Aber wie kann ich die BASH öffnen und ihr zum Beispiel "eject" sagen? Das mit den Argumenten hinten dran bekomm ich nicht hin.

mfg Floh

Lunar

Anmeldungsdatum:
17. März 2006

Beiträge: 5792

Wieso möchtest Du eject denn unbedingt in einer Bash starten? Im Allgemeinen ist die Shell nie zwingend erforderlich, um Unterprozesse zu starten.

AdrianB Team-Icon

Avatar von AdrianB

Anmeldungsdatum:
23. August 2005

Beiträge: 6565

Wohnort: Berlin

Lunar schrieb:

@AdrianB: RTFM! execv() lädt die ausführbare Datei in den aktuellen Prozess und führt sie aus. Diese Funktion kehrt nicht zurück, das ursprüngliche Programm läuft nicht weiter. Um ein neuen Prozess zu erzeugen, muss dem execv()-Aufruf ein fork()-Aufruf vorangehen.

Dann lies vorher mal die mono docu in dem Bereich http://www.go-mono.com/docs/ 😉 wie man sieht sieht man das es nicht dokumentiert ist und habe es bisher nicht gebraucht und die Funktion nur schnell heraus gesucht, aber danke für den Rat.

TDeveloper schrieb:

OK, das funktioniert soweit. Ich kann zum Beispiel nautilus öffnen oder so. Aber wie kann ich die BASH öffnen und ihr zum Beispiel "eject" sagen? Das mit den Argumenten hinten dran bekomm ich nicht hin.

Wenn du die Shell willst wäre vielleicht Zenity eher was für dich.

gruß Adrian

Lunar

Anmeldungsdatum:
17. März 2006

Beiträge: 5792

@AdrianB: Lies den ersten Absatz der Dokumentation 🙄

The Syscall wrapper class makes it possible to execute the defined system calls. For more information on any of these system calls, the linux manual system (man) has exhaustive information on each syscall in section two: 'man 2 chdir' (or often chdir(2)) for example would give information related to chdir, including error codes, which are in general not listed here.

Ich überlasse Dir den Transfer von man 2 chdir zu man 2 execv

Antworten |