www.mikrocontroller.net

Forum: PC-Programmierung Windows Forms (Visual C++ 2008) Anwendung an Kunden übergeben


Autor: Thomas W (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich bin gerade dabei eine kleine Anwendung für einen Kunden zu schreiben 
und möchte diese bald übergeben. Wie gebe ich diese Anwendung am Besten 
an den Kunden weiter?

Ich vermute mit dem Release-Ordner ist es nicht getan!

Zusätzlich will ich vermeiden, dass dieser eventuell bestimmte 
Bibliotheken etc. nachinstallieren muss.

Habe mir für dieses und natürlich auch für folgende Projekte das Buch 
"Visual C++ 2008 Kompendium" geholt, jedoch steht da nix zu meinem 
Problem drin.

Danke.

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nun, Forms setzt auf .Net auf, die passende .Net-Runtime gehört also 
auch noch dazu.

Es sollte eigentlich ein Installationsprogramm geben, das aus Deiner 
Anwendung und dem ganzen davon verwendeten Kram ein Paketchen (*.msi) 
schnürt, das Du Deinem Anwender zukommen lassen kannst.

So etwas sollte bei den .Net-Varianten des Visual Studio enthalten sein.

Autor: pewu (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Thomas,

eigentlich passt das mit dem Ordner schon.
Die EXE und alle selbst entwickelten DLLs in einem Ordner.
Wichtig: Auf einem anderen Rechner, nicht dem Entwicklunsgrechner, 
antesten.

Ein eigenes Installationsprogramm ist natürlich schön. Dieses legt die 
Ordner, Icons, Startverknüpfungen etc. an. Hier gibt es sehr gute freie 
Programme, z.B. Inno-Setup.

Die passende .NET Runtime (2 / 3.5) ist auf den meisten Windows Rechnern 
schon installiert, bzw. kann vom Kunden selbst heruntergeladen werden.
Es gibt genügend Programme die das Vorhandensein der passenden .NET 
Runtime voraussetzen.

Ich stimme da nicht mit Rufus überein. Schon das hinzupacken der .NET2 
Runtime erhöht die Installationsgrösse auf 22 MByte. Für .NET3.5 bei 
knapp 60 MByte, Multilanguage Version: um die 200 MByte!
Weiterhin gibt es da noch Unterschiede 32- und 64 Bit die zu beachten 
sind.
Da geht dann nicht: ich sende mal schnell eine Mail mit der neuesten 
Programmversion.
Denkbar ist da noch, dass man den 2 Mbyte Web-Installer von MS 
reinpackt. Ist aber aufwendig und benötigt dann beim Kunden eine 
Internetverbindung.


Peter

Autor: grastino (gastino unterwegs) (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
pewu schrieb:
> Ich stimme da nicht mit Rufus überein. Schon das hinzupacken der .NET2
> Runtime erhöht die Installationsgrösse auf 22 MByte.

Als Kunde würde ich es nicht akzeptieren, dass die Installation 
irgendwelche Fehler produziert, weil Teile fehlen, die ich dann per Hand 
aus dem Netz herunterladen und nachinstallieren muss. Zumindest auf der 
ersten Auslieferungs-CD sollte das Framework zumindestens separat mit 
dabei sein.

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sag doch erstmla in welcher Sprache du Programmier hast. Bist du sicher 
das C++ ist oder ist es c++.net bzw c#?

Autor: Klaus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
grastino (gastino unterwegs) schrieb:
> Die passende .NET Runtime (2 / 3.5) ist auf den meisten Windows Rechnern
> schon installiert, bzw. kann vom Kunden selbst heruntergeladen werden.
> Es gibt genügend Programme die das Vorhandensein der passenden .NET
> Runtime voraussetzen.

Also ein solches Programm möchte ich als Kunde nicht vorgesetzt 
bekommen! Das hat ohne externe Abhängigkeiten installierbar zu sein!

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
pewu schrieb:
> Ich stimme da nicht mit Rufus überein. Schon das hinzupacken der .NET2
> Runtime erhöht die Installationsgrösse auf 22 MByte.

Warum wohl mache ich um das von mir gerne so genannte .Net-Geraffel 
einen so großen Bogen?

Autor: Thomas W (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Erstmal danke für die Antworten.

@pewu
Die Software habe ich auf 3 anderen Rechnern getestet und sie lief 
bisher ohne Probleme an.

@grastino
Ich sehe es ähnlich wie du. Der Kunde bekommt von mir eine CD mit allen 
relevanten Updates (Framework etc.) und im Anschluss erfolgt die 
aktualisierung der eigentlichen Software per Mail.

@Peter
Ich programmiere in C++. Zumindest vermute ich es! Ich kenne zwar nicht 
wirklich den Unterschied zu C++.net, aber prinzipiell müsste es C++ 
sein.

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Thomas W schrieb:
> Ich programmiere in C++. Zumindest vermute ich es! Ich kenne zwar nicht
> wirklich den Unterschied zu C++.net, aber prinzipiell müsste es C++
> sein.

Wenn Du eine Forms-Anwendung programmierst, also eine, die auf dem 
.Net-Framework aufbaut, dann programmierst Du nicht in C++, sondern in 
einer C++-artigen Sprache namens "Managed C++" bzw. "C++/CLI".

Ein deutliches Merkmal ist der ausschließlich in dieser Sprache 
existierende "Objektzeiger" ^ und die Verwendung von gcnew anstelle 
von new.

Autor: Thomas W (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Achso!

Da es sich um eine Windows Forms Anwendung handelt und ich wirklich des 
Öfteren mit gcnew zu tun habe, handelt es sich um "Managed C++" bzw. 
"C++/CLI".

Danke für die Info^^.

Autor: Heiner Kollege (herrkollege)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Selbst ohne Forms/.NET braucht man für Visual Studio das Redistributable 
Package. Leider ist es nicht mehr so wie früher, dass ein für Windows 
geschriebenes Programm automatisch überall läuft!
Wir schreiben unsere Programme mit Mingw/GCC und wxWidgets, da kommt am 
Ende noch ein echtes .EXE heraus, das keine speziellen DLLs und Runtime 
Packages braucht...

Autor: Georg A. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wurde noch nicht erwähnt:

http://nsis.sourceforge.net

Damit kann man mit etwas Skriptkonfiguration ein Install-exe 
produzieren, wie es alle anderen auch haben. Man kann auch weitere 
Install-Programme zB. für das VS-Redistributable oder .net rausstarten.

Autor: Thomas W (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Guten Morgen.

Ich habe jetzt ein wenig mit dem "Inno Setup Compiler" rumgespielt (ähm 
ich meinte natürlich experimentiert^^) und ich muss sagen, ein wirklich 
schönes Tool.

Habe jetzt eine kleine Setup.exe erstellt und vcredist_x64/vcredist_x86 
und den Webinstaller von Netframe 3.5 integriert. Je nach bedarf kann 
der Kunde, falls die Anwendung nicht laufen sollte, die benötigte 
Software nachinstallieren.

Die .exe ist im Moment etwa 7 MB groß, was in meinen Augen noch 
erträglich ist.

Autor: Oliver Punk (Firma: UAS Merseburg) (olipunk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Rufus t. Firefly schrieb:
> pewu schrieb:
>> Ich stimme da nicht mit Rufus überein. Schon das hinzupacken der .NET2
>> Runtime erhöht die Installationsgrösse auf 22 MByte.
>
> Warum wohl mache ich um das von mir gerne so genannte .Net-Geraffel
> einen so großen Bogen?

Wegen 22 MByte? So groß ist das tägliche Adobe Update ;-). Es gibt 
sicherlich viele Gründe, .NET nicht einzusetzen. Aber die Größe der 
Kompilate ist meiner Meinung nach nicht einer der Hauptgründe.

Autor: bluppdidupp (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Zumindest bei C# Projekten geht:
Build -> Publish
und fertig. Das spuckt nen simplen Installer aus, der auch falls 
notwendig den  .Net-Framework -Installer herunterlädt.
Vielleicht gibts da bei C++/CLI Projekten ja auch?

Je nach Visual Studio Edition kann man auch Setup-Projekte anlegen (man 
hat mehrere "Setup and Deployment"-Projekttypen zur Verfügung)

Autor: Thomas W (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke für die Tipps^^!

Jetzt aber eine weitere Frage. Der Kunde kann beim Installieren einen 
eigenen Installationspfad wählen. In diesem hinterlegt meine Software 
eine ".rtf", welche ich für eine Notsicherung beim Absturz etc. 
benötige.

Denn Installationspfad kann ich mit
"LoadFile(Path::GetFullPath(".\\SystemIni.rtf")"
auslesen. Das Problem ist nur, sobald der Kunde meine SW über das 
Startmenü startet, wird diese ".rtf" nicht gefunden, da er in "Dokumente 
und Einstellungen\xxx\SystemIni.rtf" sucht.

Kennt ihr hierfür eine Lösung? Bzw. gibt es eine Möglichkeit den Wert 
einer Variable (int) andereweitig zuspeichern, damit diese nach dem 
Neustart der SW wieder zur Verfügung steht?

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Thomas W schrieb:
> Denn Installationspfad kann ich mit
> "LoadFile(Path::GetFullPath(".\\SystemIni.rtf")"
> auslesen. Das Problem ist nur, sobald der Kunde meine SW über das
> Startmenü startet, wird diese ".rtf" nicht gefunden, da er in "Dokumente
> und Einstellungen\xxx\SystemIni.rtf" sucht.
>
> Kennt ihr hierfür eine Lösung? Bzw. gibt es eine Möglichkeit den Wert
> einer Variable (int) andereweitig zuspeichern, damit diese nach dem
> Neustart der SW wieder zur Verfügung steht?

eventuell liegt es an den Rechten. man sollte Daten nicht im 
Programmordner speichern.
Es gibt die Möglichkeit der Registry oder die Umgebungsvariable 
"APPDATA" dort kannst du denn für deine Anwendung ein Path anlegen und 
dort die Datei speichern.

Autor: Markus Volz (valvestino)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
@Thomas
Das Problem dürfte daran liegen, dass im Startmenü in der Verknüpfung zu 
Deinem Programm das Feld "Ausführen in" nicht gesetzt ist.

Gruß
Markus

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Unter neueren Windows-Versionen darf eine Anwendung nicht in das 
Programme-Verzeichnis schreiben, Deine "Notsicherungsdatei" musst Du 
also an anderer Stelle unterbringen.

Wenn sie benutzerspezifische Daten enthält, gehört sie in den Profilpfad 
des jeweiligen Benutzers, wenn nicht, dann gehört sie in den "All 
Users"-Pfad.

Diese Pfade sind mit Environmentvariablen auffindbar, und je nach 
Windows-Version sehr unterschiedlich gesetzt:

XP

ALLUSERSPROFILE=C:\Dokumente und Einstellungen\All Users
APPDATA=C:\Dokumente und Einstellungen\Benutzerkontoname\Anwendungsdaten

Windows 7

ALLUSERSPROFILE=C:\ProgramData
APPDATA=C:\Users\Benutzerkontoname\AppData\Roaming


Wie auch immer, lege unterhalb des Pfades ein Verzeichnis für Deine 
Anwendung an (das Du sinnvollerweise nach der Anwendung benennen 
solltest) und pack Deine Datei da 'rein.

Den Pfad bestimmst Du mit der Win32-API-Funktion 
"GetEnvironmentVariable".
DWORD WINAPI GetEnvironmentVariable(
  __in_opt   LPCTSTR lpName,
  __out_opt  LPTSTR lpBuffer,
  __in       DWORD nSize         // maximal 32767!
);

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Rufus t. Firefly schrieb:
> Den Pfad bestimmst Du mit der Win32-API-Funktion
> "GetEnvironmentVariable".

zum glück geht das ein wenig schöner in .net

string p = GetEnvironmentVariable("APPDATA");

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Naja, die Win32-API ist halt dafür ausgelegt, aus C heraus aufgerufen 
werden zu können. Da lässt sich so etwas nicht sinnvoll anders 
erledigen.
Die .Net-Runtime ist auch nur ein Wrapper drumherum, der schlussendlich 
die Win32-API-Funktion aufruft.

Autor: bluppdidupp (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Environment.GetFolderPath() oder Application.UserAppDataPath gäbe es da 
auch noch.

Datei-Operationen, etc. suchen nach Dateien ohne vollständige Pfadangabe 
immer im "Current Directory", welches nicht immer mit dem Verzeichnis 
der exe übereinstimmen muss (kann auch während das Programm läuft z.B. 
durch FileDialog-Dinger geändert werden!)
-> Vermeide relative Dateipfade

Über Application.ExecutablePath kommt man an den Pfad zu deiner .exe
Mittels Path.GetDirectoryName() kann man dann das Verzeichnis kriegen.
Dann noch deine .rtf dranhängen und du hast nen absoluten Pfad.

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
bluppdidupp schrieb:
> Über Application.ExecutablePath kommt man an den Pfad zu deiner .exe
> Mittels Path.GetDirectoryName() kann man dann das Verzeichnis kriegen.
> Dann noch deine .rtf dranhängen und du hast nen absoluten Pfad.

Das geht zwar, aber genau da gehört so eine Datei nicht hin.

Autor: bluppdidupp (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Zumindest wenn ich nur lesend drauf zugreife sehe ich da kein Problem?

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dann natürlich nicht. Es ging aber um so etwas hier:

> In diesem hinterlegt meine Software eine ".rtf", welche ich
> für eine Notsicherung beim Absturz etc. benötige.

Das impliziert einen Schreibzugriff - verboten.

Autor: bluppdidupp (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ah, da hab ich wohl zu schnell überflogen ;D

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.