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
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.
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.
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.
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.
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:
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
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))
- 1. Wie kann ich den "Pfad" einer eingebetteten Ressource erkennen?
- 2. Vollständigen lokalen Pfad einer Ressource abrufen: // URL eingeben?
- 3. Wie kann ich den absoluten Pfad zum Eclipse-Installationsverzeichnis abrufen?
- 4. Wie kann ich den Dateinamen einer Servlet-Ressource erhalten?
- 5. Wie kann ich den Pfad einer DOS-Eingabeaufforderung verkürzen?
- 6. Wie Fotobibliothek Pfad abrufen?
- 7. Wie kann ich den Pfad abrufen, den die Anwendung mit Typoskript ausführt?
- 8. Wie kann ich den Pfad zu den allgemeinen Desktop- und Startmenü-Verzeichnissen in C# abrufen?
- 9. Rails routing: Ich ändere den 'show' Pfad für eine Ressource
- 10. Wie kann ich den IIS-Substatuscode von einer Exception abrufen?
- 11. Wie kann ich den Namespace zu einer Zeichenfolge abrufen C#
- 12. Wie kann ich den Seitentitel einer Webseite mit Python abrufen?
- 13. Wie kann ich den Inhalt einer HTTPS-Webseite abrufen?
- 14. Wie kann ich den ersten Artikel aus einer Sammlung abrufen?
- 15. Wie kann ich den Installationspfad einer anderen Anwendung programmgesteuert abrufen?
- 16. Wie finde ich den Pfad zu einer SSL-Datei?
- 17. Wie kann ich den Pfad für die Datei abrufen, die ich hochlade?
- 18. Wie kann ich den Namen des letzten Ordners in meinem basedir-Pfad in Ant abrufen?
- 19. Den Pfad von% AppData% in PowerShell abrufen
- 20. Wie kann ich den Root-Pfad der WebRole-Site von RoleEntryPoint.OnStart() abrufen?
- 21. Wie kann ich den Pfad von einem Bild in der Android-Galerie abrufen?
- 22. Den vollständigen Pfad für Windows-Dienst abrufen
- 23. Wie kann ich den Pfad ändern, den "rbenv init" verwendet?
- 24. Pfad zu einer Ressource in einer JAR ausführbaren Datei
- 25. Kann ich 'rpath' in einer bereits kompilierten Binärdatei ändern?
- 26. Blackberry - Wie Bilder aus einer Zip-Ressource-Datei abrufen?
- 27. Wie kann ich den Pfadnamen entsprechend dem Iframe-Pfad anpassen?
- 28. Wie bekomme ich einen Pfad zu einer Ressource in einer Java-JAR-Datei
- 29. Wie kann ich programmgesteuert den vollständigen Pfad der ausführenden Hauptklasse
- 30. Wie bekomme ich den absoluten Pfad einer Datei?
+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 ...) –
Vergiss nicht, die exe-Datei als em zu markieren gebettete Ressource ... –