2016-04-24 5 views
0

Ich möchte mein Programm einen Benutzer Computer für eine Datei namens "xonotic.exe" suchen und öffnen. Xonotic ist ein Videospiel, wenn das hilft. In seinem übergeordneten Ordner enthält es viele andere Inhalte, die .exe beim Start verwendet.Suche nach einer bestimmten ".exe" und programmatisch öffnen

 // Prepare the process to run 
     ProcessStartInfo start = new ProcessStartInfo(); 

     // Enter the executable to run, including the complete path 
     start.FileName = @"C:\Users\Landon\Desktop\Xonotic\xonotic.exe"; 

     start.WindowStyle = ProcessWindowStyle.Hidden; 
     start.CreateNoWindow = false; 

     Process.Start(start); 

Wenn ich mein Programm laufen in vs mit diesem Code it "xonotic.exe" aber (here's what it looks like) startet. Das ist ein Ausdruck des Bildschirms beim Start und wenn es so aussieht, als würde der Text über den Rand meines Bildschirms hinausgehen, weil es so ist; Was du siehst, ist was ich sehe.

Wenn ich Vs beenden und nur "xonotic.exe" öffnen, wie ich normalerweise würde, startet es perfekt. Meine Frage ist, warum der programmatische Weg und der manuelle Weg dieselbe .exe auf zwei verschiedene Arten öffnen würden? Auch wenn ich aus dem fehlerhaften Xonotic herauskomme und über das Symbol schwebe, um die vollständige Ansicht zu sehen, heißt es, dass du dieses Menü wegen fehlender oder nicht lokalisierbarer Inhalte/Daten erreicht hast. (You can see what I'm talking about here). Auch wenn dieser Teil leicht aufgelöst werden kann, gibt es eine Möglichkeit, nach der .exe zu suchen, ohne den Dateipfad kennen zu müssen? Ich dachte, so etwas wäre super einfach, ich möchte nur ein Programm starten, aber es hat mir viel Kummer bereitet. erster

+1

haben Sie versuchen, um [ '' ProcessStartInfo.WorkingDirectory] (https suchen: //msdn.microsoft.com/en-us/library/system.diagnostics.processstartinfo.workingdirectory%28v=vs.110%29.aspx)? – wimh

Antwort

1

Set die WorkingDirectory Eigenschaft, dann können Sie auch UseShellExecute Eigenschaft als auch bei Bedarf zu setzen versuchen:

string pathToExecutable = @"C:\Users\Landon\Desktop\Xonotic\xonotic.exe"; 

var startInfo = new ProcessStartInfo() 
{ 
    FileName = pathToExecutable, 
    WindowStyle = ProcessWindowStyle.Hidden, 
    CreateNoWindow = false, 
    WorkingDirectory = System.IO.Path.GetDirectoryName(pathToExecutable), 
    UseShellExecute = true 
}; 

UPDATE:

Sie können in allen Ordnern auf alle Laufwerk suchen, aber dies würde sehr zeitaufwendig sein. Hier ist der Code dafür:

string[] drives = Directory.GetLogicalDrives(); 
string pathToExecutable = String.Empty; 

foreach (string drive in drives) 
{ 
    pathToExecutable = 
     Directory 
     .EnumerateFiles(drive, "xonotic.exe", SearchOption.AllDirectories) 
     .FirstOrDefault(); 

    if (!String.IsNullOrEmpty(pathToExecutable)) 
    { 
     break; 
    } 
} 

if (String.IsNullOrEmpty(pathToExecutable)) 
{ 
    // We did not find the executable. 
} 
else 
{ 
    // We found the executable. Now we can start it. 
} 
+0

Das hat funktioniert, danke! aber wie kann ich das umsetzen, ohne zuerst den vollen Weg zu kennen? Gibt es eine Methode, die den Computer durchsucht und den vollständigen Pfad einer gegebenen .exe-Datei zurückgibt, wenn sie existiert? –

+0

Vielen Dank, aber ich habe eine unauthorisedAccessException ... Ich habe diese vorher bekommen, deshalb habe ich angefangen den gesamten Pfad zu benutzen anstatt zu suchen. –

+0

Wenn es möglich ist, dann verwenden Sie ['System.Windows.Forms.OpenFileDialog'] (https://msdn.microsoft.com/en-us/library/system.windows.forms.openfiledialog%28v=vs.110%29 .aspx), um den Benutzer aufzufordern, die Datei xonotic.exe auszuwählen. Sie können es auch von einer Konsolenanwendung aus verwenden. – Gabor

0

Sie haben hier 3 verschiedene Frage, vielleicht geben sie Zahlen für jede Frage. Und über Ihre dritte Frage- Sie einen Pfad von der Wurzel haben muss und dann können Sie für alle EXE-Dateien in den Unterordnern

string PathOfEXE = @"C:\"; //or d:\ or whatever you want to be the root 
List<string> fileEntries = Directory.GetFiles(PathOfEXE , "*.exe", 

System.IO.SearchOption.AllDirectories).ToList(); 
Directory.GetFiles(PathPractice, "*.exe", System.IO.SearchOption.AllDirectories).ToList(); 

      System.IO.SearchOption.AllDirectories).ToList(); 

      foreach (string fullPathfileName in fileEntries) 
{ 
string fileName =System.IO.Path.GetFileName(fullPathfileName) 
if (fileName=="xonotic.exe"){ //your code goes here 
string pathToExecutable = fullPathfileName ; 



} 



    } 
Verwandte Themen