2009-03-09 12 views
0

Ich habe eine ausführbare Datei in mein Projekt eingefügt (d. H. Wenn Sie das Projekt im Projektmappen-Explorer in VS2008 öffnen, sehen Sie es zusammen mit allen anderen Klassen). Diese ausführbare Datei muss von meinem Programm gestartet werden. Wie kann ich den Pfad programmgesteuert abrufen?Wie kann ich den Pfad einer kompilierten Ressource abrufen?

Antwort

3

Ich habe dies noch nie mit ausführbaren Dateien getan ... Wenn es sich jedoch um eine eingebettete Ressource handelt, können Sie die Liste der eingebetteten Ressourcen in Ihrer Anwendung aufzählen (oder direkt auf den Namen verweisen), wenn Sie die finden eine geeignete, schreiben Sie es auf die Festplatte, und führen Sie es dann aus.

zu extrahieren:

Assembly assembly = Assembly.GetExecutingAssembly(); 
using (Stream stream = assembly.GetManifestResourceStream("resource name") 
{ 
    using FileStream fs= new FileStream("executable name") 
    { 
    byte[] buffer = new byte[32*1024]; 
    int bytesRead; 
    while ((bytesRead= stream.Read(buffer, 0, buffer.Length)) > 0) 
    { 
     fs.Write(buffer, 0, bytesRead); 
    } 
    } 
} 

auszuführen:

using System.Diagnostics; 

Process someProc; 
someProc= Process.Start("executable name"); 

Als Daniel L weist darauf hin, nicht zu vergessen die Ressourcen als "eingebettete Ressource" zu markieren.

+0

+1 für die genau die gleiche Sache Vorlage ich darüber war:] (Sieht aus wie die einzige Lösung das hat die Frage eigentlich verstanden ...) –

+0

Vergiss nicht, die exe-Datei als em zu markieren gebettete Ressource ... –

0

Hier ist ein Beispiel von Text aus einer Textressource bekommen:

Assembly assembly = Assembly.GetExecutingAssembly(); 
Stream stream = assembly.GetManifestResourceStream("ResourceTextFileName"); 
StreamReader textStreamReader = new StreamReader(stream); 

Hoffentlich können Sie nachlesen, wie man mit dieser eine ausführbare Datei zu tun.

-1

können Sie die Assembly Klasse verwenden -

Assembly.GetExecutingAssembly().Location 

sollten Sie auf Ihre laufenden App zeigen. Verwenden Sie diesen Pfad, entfernen Sie die EXE und fügen Sie den Dateinamen Ihrer ausführbaren Datei hinzu.

string filename = Assembly.GetExecutingAssembly().Location; 
filename = filename.Substring(0, filename.LastIndexOf("\\") + 1); 
filename += "my_exe_name.exe"; 
Process.Start(filename); 

Hinweis, dass dies für Webapps nicht funktioniert, aber, wie die Location-Eigenschaft an zufälligen Stellen wie der GAC hinweisen.

0

Wenn Sie die ausführbare Datei zusammen mit Ihrem Projekt in demselben Ordner bereitstellen, können Sie mithilfe der Environment-Klasse das Arbeitsverzeichnis Ihrer ausführbaren Datei abrufen. Das wäre: Environment.CurrentDirectory.

Sie können die Eigenschaft "Copy to output directory" der ausführbaren Datei im Solution Explorer auf "Copy always" oder "Copy if neuer" setzen, um dies zu berücksichtigen.

0

Dies ist nicht genau das, was Sie gefragt, könnte aber nützlich sein, wenn einer der Vorschläge anderer Leute geschrieben haben mit:

Beachten Sie, dass, wenn Ihre Anwendung eine Windows-Forms-Anwendung ist, und es endet in C installiert : \ Programme ... Sie haben möglicherweise keinen Schreibzugriff auf Ihren Anwendungsordner, wenn der Benutzer, der die Anwendung startet, nicht als Administrator ausgeführt wird.

Das könnte ein Problem sein, wenn Sie die eingebettete Ressource "extrahieren" und auf der Festplatte im selben Ordner wie Ihre App speichern möchten.

würde ich empfehlen, entweder:

  1. Nicht die EXE als Ressource einbetten. Setzen Sie die Option "In Ausgabeverzeichnis kopieren" auf "Immer". Stellen Sie es dann zusammen mit Ihrer Hauptanwendung bereit.exe

  2. Einbetten als Ressource, aber beim Speichern auf Festplatte verwenden Sie entweder den temporären Windows-Ordner (wenn es nur eine einmalige Sache ist) oder den Datenordner des Benutzers (C: \ Dokumente und Einstellungen \ [Benutzer] \ Anwendungsdaten)

Sie können den richtigen Ordner für das aktuelle Betriebssystem wie folgt erhalten:

// for the Windows temp folder 
Path.GetTempPath() 

// for the user's application data folder 
Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData)) 
Verwandte Themen