Laden...

EXE läuft nicht allein!?

Erstellt von Roper vor 14 Jahren Letzter Beitrag vor 14 Jahren 3.204 Views
R
Roper Themenstarter:in
40 Beiträge seit 2009
vor 14 Jahren
EXE läuft nicht allein!?

Hi,

ich habe gerade ein Problem bezüglich einer fertigen WPF-Anwendung die ich kompiliert habe.
Im bin Ordner finden sich eine ganze Reihe von Dateien wieder:


MyProject.exe
MyProject.pdb
MyProject.vshost.exe
MyProject.vshost.exe.manifest
WPFToolkit.dll
WPFToolkit.pdb

Außerdem noch eine .xml Datei die ich eigentlich in das Projekt mit eingebunden hatte.

Nun läuft die Anwendung nicht wenn ich die .exe allein herauskopiere. Ich habe verschiedenes getestet. Mindestes die WPFToolkit.dll und meine XML-Datei müssen im selben Verzeichnis sein, damit das Programm überhaupt startet. (Brauche ich den Rest dann überhaupt mit verteilen, wenn ich das Programm weitergebe?)

Kann ich das Ganze außerdem irgendwie so lösen, dass alles nötige bereits in der .exe steckt und diese allein läuft? Zumindest meine XML-Datei die ich ins Projekt eingebunden habe. Bei der .dll befürchte ich, dass es garnicht klappt.

Gruß Roper

1.130 Beiträge seit 2007
vor 14 Jahren

Lösung:Beides als Resource einbinden und von da auch laden.
Für die dll musst Assembly.Load(byte[]) am anfang verwenden. Evl. musst du eine 2. exe schreiben, die die eigentliche exe und die dll als resource hat. gehen tuts aber auf jeden fall!

Projekte:Jade, HttpSaver
Zum Rechtschreiben gibts doch schon die Politiker. Aber die bauen auch nur mist!

313 Beiträge seit 2006
vor 14 Jahren

Du willst keinen Installer?

R
Roper Themenstarter:in
40 Beiträge seit 2009
vor 14 Jahren

@Floste:
Ok danke. Aber wie binde ich die beiden ein? Ist das nur eine Einstellung?
Die XML-Datei habe ich gemäß dem Vorschlag HIER als "Inhalt" und "Immer kopieren" festgelegt. Wenn ich es in "Ressource" ändere will mein Programm nicht mehr starten!?

@Ploetzi:
Damit habe ich mich bisher nie befasst. Bietet Visual Studio da Optionen oder geht das nur über zusätzliche Software?

195 Beiträge seit 2006
vor 14 Jahren

Hi,

ja du benötigst deine exe + Toolkit und evtl die xml Datei.

Du kannst die Toolkit dll in die Exe rein-mergen.

Wenn du dann das Problem mit der XML Datei behoben hast bleibt dir nur eine deine exe übrig.

Chris

946 Beiträge seit 2008
vor 14 Jahren

Du kannst mit .NETZ alle deine dlls zu der exe hinzufügen lassen.
Das mit der XML-Datei wirst du jedoch anders lösen müssen.
Wenn sie in der exe drin ist, kannst du sie nicht mehr verändern.

Da du vermultich irgendwelche Konfigurationen in diese rein schreibst und rausliest, brauchst du nur noch eine Standardkonfiguration.
Dass man die Datei löscht, kann immer mal passieren.

mfg
SeeQuark

R
Roper Themenstarter:in
40 Beiträge seit 2009
vor 14 Jahren

Die XML-Datei kann ich wenn nötig auch komplett lassen. Meine Anwendung liest Abläufe aus XML Dateien aus und es gibt einen Startablauf der gleich geladen werden soll. Deshalb habe ich eine XML-Datei zum Projekt hinzufügen wollen..

Wie funktioniert das mit der WPFToolkit.dll? Kann ich beim Verweis auf diese irgendwie angeben, dass sie mit integriert werden soll. Oder brauche ich zusätzliche Software wie dieses .NETZ?

946 Beiträge seit 2008
vor 14 Jahren

Kann ich beim Verweis auf diese irgendwie angeben, dass sie mit integriert werden soll.

Du könntest sie zwar als Resource in der exe halten und nur über Reflection darauf zugreifen (s. Floste), aber mehr geht imho nicht.

Die Möglichkeiten wurden eigentlich ja schon alle genannt.1.Installer: Installier dein Programm und entpackte die verschiedenen Dateien. 1..NETZ: Packt die dll's und die exe als zu einem File zusammen. 1.So lassen: Lass die Dateien so wie sie sind oder und/oder füge sie zu einem (ev. selbstentpackenden) Archiv hinzu.
Wenn es nur um das Toolkit geht, kannst du es ja auch den Hinweis geben, dass man es selber runterladen soll.

1.**Reflection:**Das ist eher eine theoretische Lösung -> nicht zu empfehlen.

Ich hoffe, ich habe nichts vergessen.
Such dir was aus 🙂

EDIT: Ach so, die Dateien MyProject.pdb, MyProject.vshost.exe, MyProject.vshost.exe.manifest und WPFToolkit.pdb kannst du ohne Probleme weglassen.

mfg
SeeQuark

R
Roper Themenstarter:in
40 Beiträge seit 2009
vor 14 Jahren

EDIT: Ach so, die Dateien MyProject.pdb, MyProject.vshost.exe, MyProject.vshost.exe.manifest und WPFToolkit.pdb kannst du ohne Probleme weglassen.

Ok danke, das war mir noch wichtig das zu wissen.

EDIT: Für meine .xml Datei gibt es noch ein Problem: Wenn ich sie als Resource angebe wird sie zwar mit in die .exe hineinkompiliert, allerdings lässt sich diese dann nicht starten.

R
317 Beiträge seit 2006
vor 14 Jahren

Hi,

wie lädst du denn die XML-Datei?

Wenn du Sie bisher von der Platte geladen hast (über ne direkte Pfadangabe), musst du das jetzt natürlich anders machen, da die XML Datei nicht mehr auf der Festplatte liegt, sondern in die EXE-Datei integriert ist.

Das wäre z.B. so möglich (über Angabe des assemblyNames, also dem Namen der EXE-Datei, und den Dateinamen der eingebetteten XML-Datei):


        public static Stream GetEmbeddedFile(string assemblyName,
                                             string fileName)
        {
            try
            {
                Assembly a = Assembly.Load(assemblyName);
                Stream str = a.GetManifestResourceStream(assemblyName + "." + fileName);
                if (str == null)
                {
                    throw new Exception(string.Format("Could not locate embedded resource '{0}' in assembly '{1}'",
                                                      fileName,
                                                      assemblyName));
                }
                return str;
            }
            catch (Exception e)
            {
                throw new Exception(assemblyName + ": " + e.Message);
            }
        }

Mfg,
Daniel

R
Roper Themenstarter:in
40 Beiträge seit 2009
vor 14 Jahren

Die XML-DAtei habe ich gemäß diesem Vorschlag HIER als "Inhalt" und "Immer kopieren" angegeben. Ich kann im Projekt also einfach nur per Name der Datei (in meinem Fall start.xml) darauf zugreifen.

Was muss ich hier einstellen damit ich es gemäß deinem Vorschlag umsetzen kann und vorallem: Kann ich es so einbinden dass es weitern einfach per Name klappt und trotzdem alles in der .exe steckt?