Autor Beitrag
Slim
Hält's aus hier
Beiträge: 12



BeitragVerfasst: So 08.09.13 15:44 
Hallo,
ich bin ein totaler Anfänger in C#,aber ich möchte gern eine EXE starten,wenn ich ein Button drücke.
Das ganze klappt mit dem Code:
ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
Process proc = new Process();
proc.EnableRaisingEvents = false;
proc.StartInfo.FileName = "firefox.exe";
proc.StartInfo.Arguments = "LINK";
proc.Start();
proc.Close();
proc.Dispose();

Schon super und jetzt möchte ich eine Spiel-exe starten(die von FIFA 13).
Die Exe befindet sich im Pfad:
C:\Program Files (x86)\Origin Games\FIFA 13\Game

Problem 1:
Wie gebe ich den Pfad richtig an? Mit den Leerzeichen das kann ja nicht richtig sein oder?

Problem 2:
Wie ruf ich die Exe auf? Ich habs mit:
ausblenden C#-Quelltext
1:
System.Diagnostics.Process.Start(System.Environment.SystemDirectory + "\\fifa13.exe");					

versucht, aber da bekomm ich diesen Fehler:
Zitat:
{"Das System kann die angegebene Datei nicht finden"}

Ich hab gerade gegoogelt, aber keine der vorgeschlagenen Funktionen hat funktioniert. :(

Bitte um Hilfe.


Moderiert von user profile iconTh69: Topic aus C# - Die Sprache verschoben am So 08.09.2013 um 16:23
Moderiert von user profile iconTh69: C#-Tags hinzugefügt
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4764
Erhaltene Danke: 1052

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: So 08.09.13 16:16 
Hallo Slim :welcome:

hast du denn mal versucht den Pfadnamen (inkl. Leerzeichen) einzusetzen?
System.Environment.SystemDirectory ist auf jeden Fall nicht das richtige Verzeichnis, denn dies ist das "Windows/System32"-Verzeichnis.

Bei den Dateinamen beachten, daß du entweder den Slash '/' einsetzt oder aber mit Backslash '\' das @-Zeichen vor den String setzt (damit du nicht jedes Backslash-Zeichen verdoppeln mußt), z.B.
ausblenden C#-Quelltext
1:
proc.StartInfo.FileName = @"C:\Program Files (x86)\Origin Games\FIFA 13\Game\fifa13.exe";					
Slim Threadstarter
Hält's aus hier
Beiträge: 12



BeitragVerfasst: So 08.09.13 16:37 
Hui, die Antwort kam, aber schnell! Vielen Dank!
Jetzt bekomme ich den Fehler(beim anklicken vom Button):"Missing required file ""ssleay32.dll"
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4764
Erhaltene Danke: 1052

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: So 08.09.13 16:49 
Ich denke, du mußt auch noch das WorkingDirectory (Aktuelle Verzeichnis) auf diesen Pfad setzen:
ausblenden C#-Quelltext
1:
proc.StartInfo.WorkingDirectory = @"C:\Program Files (x86)\Origin Games\FIFA 13\Game";					
Slim Threadstarter
Hält's aus hier
Beiträge: 12



BeitragVerfasst: So 08.09.13 17:02 
*______*
Es geht! Sau geil, vielen vielen Dank!
Slim Threadstarter
Hält's aus hier
Beiträge: 12



BeitragVerfasst: Fr 13.09.13 23:11 
Ich hätte noch eine Frage.
Der Pfad soll vorher ausgewählt werden. Dafür hab ich diesen Code geschrieben/zusammengegoogelt/gesucht:
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
            System.Windows.Forms.FolderBrowserDialog objDialog = new FolderBrowserDialog();
            objDialog.Description = "Beschreibung";
            objDialog.SelectedPath = @"C:\";       // Vorgabe Pfad (und danach der gewählte Pfad)

            DialogResult objResult = objDialog.ShowDialog(this);
            if (objResult == DialogResult.OK)
                MessageBox.Show("Neuer Pfad : " + objDialog.SelectedPath);
            else
                MessageBox.Show("Abbruch gewählt!");


Die fifa13.exe soll noch immer geöffnet werden:
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
      private void button1_Click(object sender, EventArgs e)
      {           
            Process proc = new Process();
            proc.EnableRaisingEvents = false;
            proc.StartInfo.WorkingDirectory = @"objDialog.SelectedPath";
            proc.StartInfo.FileName = @"objDialog.SelectedPath\fifa13.exe";
            proc.Start();
            proc.Close();
            proc.Dispose();
      }

Ich habe StartInfo.WorkingDirectory und FileName schon in allen Variationen versucht, es scheint damit einfach nicht zu gehen.
(ich hab es mit Klammern, mit und ohne @ versuch etc. etc. etc.)

Ich bin noch nicht mal soweit,dass die "objDialog.SelectedPath" gespeichert wird, sprich beim Neustart des Programmes wieder aufgerufen wird ohne alles neu auszuwählen und habe jetzt hier schon Probleme :(

Moderiert von user profile iconTh69: Code- durch C#-Tags ersetzt
Moderiert von user profile iconTh69: C#-Tags hinzugefügt
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4764
Erhaltene Danke: 1052

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Sa 14.09.13 08:53 
Hallo Slim,

wie kommst du denn jetzt auf einmal auf diesen Code?
Vergleiche deinen jetzigen Code mal mit
ausblenden C#-Quelltext
1:
System.Environment.SystemDirectory + "\\fifa13.exe"					

(aus deinem Beitrag weiter oben).

Für Pfade gibt es die Klasse Path, mit dessen Methode Combine du Pfadnamen zusammensetzen kannst (ohne dich um die Pfadtrennzeichen kümmern zu müssen), z.B.
ausblenden C#-Quelltext
1:
string fullpath = Path.Combine(System.Environment.SystemDirectory, "fifa13.exe");					


P.S. Dein eigentlicher Fehler ist aber, daß du in der Methode button1_Click keinen Zugriff auf die lokale Variable objDialog hast. Du müßtest dir den aktuell selektierten Pfad objDialog.SelectedPath in einer Membervariablen deiner Klasse merken (oder aber als Eigenschaft anlegen)!
Slim Threadstarter
Hält's aus hier
Beiträge: 12



BeitragVerfasst: Sa 14.09.13 22:41 
Danke für die ausführliche Antwort!
Ich habs jetzt wiefolgt gelöst:
Beim auswählen des Pfads wird eine TXT erstellt. Diese wird dann beim starten der EXE wird die TXT dann ausgelesen.
Das ganze hier in Code form:
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
private void button8_Click_1(object sender, EventArgs e)
{
    System.Windows.Forms.FolderBrowserDialog objDialog = new FolderBrowserDialog();
    objDialog.Description = "Beschreibung";
    objDialog.SelectedPath = @"C:\";       // Vorgabe Pfad (und danach der gewählte Pfad
    Settings.Default.Save();
    DialogResult objResult = objDialog.ShowDialog(this);

    if (objResult == DialogResult.OK)
    {
        StreamWriter myWriter = File.CreateText(@"c:\SpeicherortFIFA13.txt");
        myWriter.WriteLine(objDialog.SelectedPath);
        MessageBox.Show("Neuer Pfad : " + objDialog.SelectedPath);
        myWriter.Close();
    }
    else
        MessageBox.Show("Abbruch gewählt!");
}

dann das einlesen:
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
private void button1_Click(object sender, EventArgs e)
{
    string line;
    System.IO.StreamReader file = new System.IO.StreamReader(@"c:\SpeicherortFIFA13.txt");
    line = file.ReadLine();
    MessageBox.Show(line);
    Process proc = new Process();
    proc.EnableRaisingEvents = false;

    proc.StartInfo.WorkingDirectory = "line";
    proc.StartInfo.FileName = @"\\fifa13.exe";
    string fullpath = Path.Combine(line, "fifa13.exe");
    proc.Start();
    proc.Close();
    proc.Dispose();
}


Ich habs jetzt mit 2 Backslashs, einem, garkeinem und so weiter versucht.. Es kommt immer der Fehler,dass der Netzwerkpfad nicht gefunden wurde :(

Bitte ein letztes mal um Hilfe :(

LG ein verzweifelter,seit einigen Stunden rum probierender Slim!

Moderiert von user profile iconTh69: Code- durch C#-Tags ersetzt
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4764
Erhaltene Danke: 1052

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: So 15.09.13 10:39 
Hallo Slim,

sorry, das zu schreiben, aber ich glaube, du bist noch nicht soweit für dieses Projekt. Dein Code wird immer wüster (und das passiert eben, wenn man einfach so Code aus dem Internet zusammenkopiert und nicht versteht).

Dir scheint z.B. der Unterschied zwischen einer Variablen line und einem String-Literal ("line") wohl noch nicht so klar zu sein. Vllt. habe ich dich mit meinem Hinweis auf die Path-Klasse nur noch mehr verwirrt (aber ich dachte, diese Grundlagen beherrscht du schon). Mach am besten ersteinmal die Änderung bzgl. proc.StartInfo.Filename rückgängig (denn jetzt funktioniert es ja gar nicht mehr).

Und hast du denn ein Buch anhand dessen du lernst?

P.S. user profile icongfoidl hat dies ja auch so ähnlich gesehen: myCSharp.de - C# Membervariablen + Pfad abspeichern und nach Programm Neustart aufrufen
Slim Threadstarter
Hält's aus hier
Beiträge: 12



BeitragVerfasst: So 15.09.13 13:32 
Hm, da hast du wohl recht.
Danke