Laden...

Ressourcen Exe ausführen - Relativer Pfad

Erstellt von 1mannlan vor 14 Jahren Letzter Beitrag vor 14 Jahren 6.465 Views
1
1mannlan Themenstarter:in
88 Beiträge seit 2009
vor 14 Jahren
Ressourcen Exe ausführen - Relativer Pfad

Hi,
ich bin neu hier im Forum und hab gleich die erste Frage.
Undzwar geht es darum, das ich eine Anwendung die ich in mein Programm eingebaut hab mit Parametern Starten möchte. Ich habe es also so Probiert:

string Programmname = "Dateiname.exe";
string Parameter = "parameter";
System.Diagnostics.Process.Start(Programmname, Parameter);

Nun das hat leider nicht geklappt er spukt mir immer einen Error aus die Datei existiere nicht, aber wie soll ich ihm sonst sagen das die Datei bereits in der
Anwendung drin ist?
(Habs über "Vorhandenes Element hinzufügen" einefügt.)
Ich habe gelesen man muss die Datei irgentwie vorher kopieren oder so, aber da ich ja das ohne richtigen Pfad nicht kann, hoffe ich ihr könnt mir helfen 😃

THX!

B
49 Beiträge seit 2009
vor 14 Jahren

Guck mal ob dir das weiterhilft:

[FAQ] Pfad zur eigenen Anwendung (EXE) ermitteln

1
1mannlan Themenstarter:in
88 Beiträge seit 2009
vor 14 Jahren

Hab ich ja auch schon probiert, allerdings ist die Datei ja in keinem Ordner sondern vielmehr in der Datei selbst, so soll es zumindest sein 😃.

49.485 Beiträge seit 2005
vor 14 Jahren

Hallo 1mannlan,

wenn die EXE in den Ressourcen eine native EXE ist, musst du sie auf die Platte schreiben, um sie starten (Process.Start) zu können.

Wenn es eine .NET EXE ist, dann kannst du sie aus den Ressourcen als Byte-Array auslesen und das Byte-Array über Assembly.Load laden und dann per Reflection (MethodInfo.Invoke) die Main-Methode starten.

herbivore

1
1mannlan Themenstarter:in
88 Beiträge seit 2009
vor 14 Jahren

Es ist einfach eine Exe, welche ich eingebunden habe(ein Tool).
Ich habe es jetzt manuell hinzugefügt (neue ressource...)
Jetzt ist die Datei auch um 1,1mb größer, wie ich es allerdings anwähle ist mein Problem, mir geht es um den Pfad.

49.485 Beiträge seit 2005
vor 14 Jahren

Hallo 1mannlan,

ich habe deine Frage bereits beantwortet.

herbivore

916 Beiträge seit 2008
vor 14 Jahren

Ich hab das Problem nicht einmal verstanden... 😦

Again what learned...

1
1mannlan Themenstarter:in
88 Beiträge seit 2009
vor 14 Jahren

Ich versuche ja sie auf die Platte zu schreiben, aber womit?
Welchen Pfad hat die Exe wenn sie in den Ressourcen ist?

C
52 Beiträge seit 2010
vor 14 Jahren

Die exe ist in die Resourcen eingebettet, oder? Also du hast Add->Existing Item... gemacht? Die wirst du mit Process.Start nicht starten können.
Ist das eine .NET exe? Oder eine x-beliebige Datei?

Falls es eine .NET exe ist, dann könntest du noch versuchen, sie als byte[] aus den Resourcen direkt in den Speicher zu laden und auszuführen. Bin mir nicht sicher, ob das auch mit anderen exe-Files geht.


using System.Reflection;
using System.IO;

Assembly currentAssembly= Assembly.GetExecutingAssembly();
string assemblyRoot = currentAssembly.GetName().Name;

using(Stream res = currentAssembly.GetManifestResourceStream(assemblyRoot + ".NameOf.exe")){

if(res != null && res.Length > 0)
{
   byte[] resBuffer = new byte[res.Length];
  res.Read(resBuffer, 0, resBuffer.Length);

try{
   Assembly exe = Assembly.Load(resBuffer);
   exe.EntryPoint.Invoke(null, null);
}catch{}

}
}

Ungefähr so, bin mir nicht mehr 100%ig sicher. Ich glaube aber nicht, dass das mit ner x-beliebigen exe gehen wird, kanns jetzt nicht testen, muss los 😁

49.485 Beiträge seit 2005
vor 14 Jahren

Hallo 1mannlan,

Welchen Pfad hat die Exe wenn sie in den Ressourcen ist?

gar keine Pfad, das ist ja das Problem. Eine Ressource hat den Namen, den du selbst (oder VS) vergeben hast (hat). Über diesen Namen kannst du sie auslesen, z.B. mit der ResourceManager-Klasse. Siehe auch Ressourcen in Anwendungen.

herbivore

1
1mannlan Themenstarter:in
88 Beiträge seit 2009
vor 14 Jahren

Dann versuche ich mal meine Frage umzuformulieren, sry das ich mich vielleicht so blöd anstelle.
Ich möchte eben die Datei in ein Verzeichnis aus den Ressourcen kopieren, wenn man sie nicht direkt öffnen kann. Es ist keine .Net datei sondern ein Serverupdate tool.
Ich habe es wie folgt hinzugefügt:

Projekt->Properties->doppelt auf "Resources.resx" ->dann auf Ressource hinzufügen->dropdown auf "Vorhandene Datei hinzufügen"->Datei ausgewählt.
Das ganze sieht dann so aus:
siehe Anhang

Wie ihr seht habe ich die Datei schon versucht zu kopieren, bin aber gescheitert.
Ich bin eben ein Neuling 😐.

Das mit dem Starten kriege ich schon hin, wenn ich sie einmal zum kopieren gekriegt habe.
Hoffe jetzt versteht jeder was ich meine 😃

3.825 Beiträge seit 2006
vor 14 Jahren

Hallo 1mannlan,

einfacher geht es wenn Du die Exe nicht als Resource einbindest sondern mit Deiner Applikation in einem Setup-Project weitergibst.

Grüße Bernd

Workshop : Datenbanken mit ADO.NET
Xamarin Mobile App : Finderwille Einsatz App
Unternehmenssoftware : Quasar-3

1
1mannlan Themenstarter:in
88 Beiträge seit 2009
vor 14 Jahren

Nunja, ich habs nun aufgegeben und lade die datei einfach per FTP runter, geht mit 2 Zeilen Code, hätte mich eben interresiert wie es geht.

U
135 Beiträge seit 2009
vor 14 Jahren

Hi 1mannlan,

das was Du ursprünglich tun wolltest, lässt sich auch mit 3 Zeilen Code lösen:


String myFile = Path.GetTempPath() + "\\StupidAppFromRes.exe";
File.WriteAllBytes(myFile, Properties.Resources.StupidApp);
System.Diagnostics.Process.Start(myFile);     

Ein Beispielprojekt hab ich Dir mal angehängt.

Gruß
Ben