Laden...

Aus C# externe Exe Datei ausführen

Erstellt von alexander vor 20 Jahren Letzter Beitrag vor 20 Jahren 24.272 Views
alexander Themenstarter:in
2.217 Beiträge seit 2003
vor 20 Jahren
Aus C# externe Exe Datei ausführen

Hallo,

wie führe ich mit c# ein externes programm (z.b. exe) aus. (also wenn man aufn nen button klickt, das das programm startet)

Viele Grüße
Alexander

G
205 Beiträge seit 2003
vor 20 Jahren

Hallo,
du musst den NameSpace System.Diagnostic einbinden.
Dann kannst du die exe Files einfach mit Process.Start("Name.exe"); aufrufen

Beispiel:


using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;
using System.Diagnostics;

namespace WindowsApplication2
{
	/// <summary>
	/// Zusammendfassende Beschreibung für Form1.
	/// </summary>
	public class Form1 : System.Windows.Forms.Form
	{
		private System.Windows.Forms.Button button1;
		/// <summary>
		/// Erforderliche Designervariable.
		/// </summary>
		private System.ComponentModel.Container components = null;

		public Form1()
		{
			//
			// Erforderlich für die Windows Form-Designerunterstützung
			//
			InitializeComponent();

			//
			// TODO: Fügen Sie den Konstruktorcode nach dem Aufruf von InitializeComponent hinzu
			//
		}

		/// <summary>
		/// Die verwendeten Ressourcen bereinigen.
		/// </summary>
		protected override void Dispose( bool disposing )
		{
			if( disposing )
			{
				if (components != null) 
				{
					components.Dispose();
				}
			}
			base.Dispose( disposing );
		}

		#region Windows Form Designer generated code
		/// <summary>
		/// Erforderliche Methode für die Designerunterstützung. 
		/// Der Inhalt der Methode darf nicht mit dem Code-Editor geändert werden.
		/// </summary>
		private void InitializeComponent()
		{
			this.button1 = new System.Windows.Forms.Button();
			this.SuspendLayout();
			// 
			// button1
			// 
			this.button1.Location = new System.Drawing.Point(96, 192);
			this.button1.Name = "button1";
			this.button1.TabIndex = 0;
			this.button1.Text = "button1";
			this.button1.Click += new System.EventHandler(this.button1_Click);
			// 
			// Form1
			// 
			this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
			this.ClientSize = new System.Drawing.Size(292, 273);
			this.Controls.AddRange(new System.Windows.Forms.Control[] {
																		  this.button1});
			this.Name = "Form1";
			this.Text = "Form1";
			this.ResumeLayout(false);

		}
		#endregion

		/// <summary>
		/// Der Haupteinstiegspunkt für die Anwendung.
		/// </summary>
		[STAThread]
		static void Main() 
		{
			Application.Run(new Form1());
		}

		private void button1_Click(object sender, System.EventArgs e)
		{
			Process.Start("explorer.exe");					
		}
	}
}

C
980 Beiträge seit 2003
vor 20 Jahren

Falls du eine CLI Anwendung aurfrufst ist vielleich auch die Executor Klasse in System.CodeDom.Compiler interessant, da kannst u.a. auch gleich die Ausgabe auslesen ...

siehe auch:
http://www.aspheute.com/artikel/20010220.htm

I.a. ist jedoch guenni's Lösung vorzuziehen ...

J
6 Beiträge seit 2003
vor 20 Jahren
Noch eine Möglichkeit...

Es geht auch z.B. so:

private void button1_Click(object sender, System.EventArgs e) {
  System.Diagnostics.Process.Start("IExplore.exe");
}

Es kann der Namen eines Programms oder einer Datei übergeben werden. Bei einer Datei wird das Standardprogramm für diese Datei geöffnet.

Gruß, Ja-Pa

T
41 Beiträge seit 2003
vor 20 Jahren

*grusel*

Ich bezweifle, dass dafür der Namensraum Diagnostics eingeführt wurde 😉. Funktioniert zwar, aber es gibt anscheinend was passenderes:
Ich würds mit AppDomain.CurrentDomain.ExecuteAssembly("bla.exe") bzw AppDomain.CreateDomain("neue domain").ExecuteAssembly("bla.exe") ausprobieren.

Korn, Bier, Schnaps und Wein
und wir höhren unsere Leber schrein!

C
980 Beiträge seit 2003
vor 20 Jahren

Ich würds mit AppDomain.CurrentDomain.ExecuteAssembly("bla.exe") bzw AppDomain.CreateDomain("neue domain").ExecuteAssembly("bla.exe") ausprobieren.

Naja, es steht zwar nirgends explizit da, aber ich bin mir ziemlich sicher, dass das so nur mit .NET Assemblies geht. Nur schon weil das ganze Inprozess abläuft. Wie willst du eine klassische PE Applikation im selben Prozess im Kontext einer Application Domain ablaufen lassen, die nur ausserhalb der CLI existieren kann? Ansonsten wird der Begriff "Assembly" auch nur im .NET Kontext verwendet ... wie auch immer, falls es trotzdem geht, lass es mich wissen 😉

V
842 Beiträge seit 2003
vor 20 Jahren

Mach es doch so, da kannst du noch diverse Attribute festlegen:

ProcessStartInfo userInfo = new ProcessStartInfo("CMD.EXE");
userInfo.Arguments = @"/C net view > User.txt";
userInfo.WindowStyle = ProcessWindowStyle.Hidden;
Process.Start(userInfo).WaitForExit();

Als erstes öffnest du einen neues Process. Danach hast du diverse optinale Einstellungen. Hier mal meine erklärt: Welche Argumente übergeben werden sollen an das Programm. Dann habe ich festgelegt das es versteckt sein soll um das aufblitzen des DOS-Programms zu vermeiden. Dann warte ich zum schluss bis er das Programm ausgeführt hat, erst dann geht die Verarbeitung weiter.

Code-Hacker