Entwickler-Ecke
IO, XML und Registry - EXE über Button starten
Slim - So 08.09.13 15:44
Titel: EXE über Button starten
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:
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:
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
Th69: Topic aus C# - Die Sprache verschoben am So 08.09.2013 um 16:23
Moderiert von
Th69: C#-Tags hinzugefügt
Th69 - 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.
C#-Quelltext
1:
| proc.StartInfo.FileName = @"C:\Program Files (x86)\Origin Games\FIFA 13\Game\fifa13.exe"; |
Slim - 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 - So 08.09.13 16:49
Ich denke, du mußt auch noch das
WorkingDirectory (Aktuelle Verzeichnis) auf diesen Pfad setzen:
C#-Quelltext
1:
| proc.StartInfo.WorkingDirectory = @"C:\Program Files (x86)\Origin Games\FIFA 13\Game"; |
Slim - So 08.09.13 17:02
*______*
Es geht! Sau geil, vielen vielen Dank!
Slim - 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:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9:
| System.Windows.Forms.FolderBrowserDialog objDialog = new FolderBrowserDialog(); objDialog.Description = "Beschreibung"; objDialog.SelectedPath = @"C:\"; 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:
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
Th69: Code- durch C#-Tags ersetzt
Moderiert von
Th69: C#-Tags hinzugefügt
Th69 - Sa 14.09.13 08:53
Hallo Slim,
wie kommst du denn jetzt auf einmal auf diesen Code?
Vergleiche deinen jetzigen Code mal mit
C#-Quelltext
1:
| System.Environment.SystemDirectory + "\\fifa13.exe" |
(aus deinem Beitrag weiter oben).
Für Pfade gibt es die Klasse
Path [
http://msdn.microsoft.com/de-de/library/system.io.path.aspx], mit dessen Methode
Combine du Pfadnamen zusammensetzen kannst (ohne dich um die Pfadtrennzeichen kümmern zu müssen), z.B.
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 - 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:
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:\"; 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:
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
Th69: Code- durch C#-Tags ersetzt
Th69 - 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.
gfoidl hat dies ja auch so ähnlich gesehen:
myCSharp.de - C# Membervariablen + Pfad abspeichern und nach Programm Neustart aufrufen [
http://www.mycsharp.de/wbb2/thread.php?threadid=109389]
Slim - So 15.09.13 13:32
Hm, da hast du wohl recht.
Danke
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!