ERLEDIGT
NEIN
ANTWORTEN
11
ZUGRIFFE
661
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
  1. #1
    Avatar von the incredible Leitman
    the incredible Leitman ist offline Mitglied Brokat
    Registriert seit
    Jul 2006
    Ort
    ÖSTERREICH
    Beiträge
    406
    Hallo zusammen

    Ich hab ein Problem damit, wie man "richtig" eine .exe, geschrieben in VC++, .net 2.0 auf einem Zielrechner deployed -.-

    Zur Vorgeschichte:
    Soweit ich weiß, MÜSSEN Anwendung welche in VC++ geschrieben wurden ein manifest beinhalten... dieses kann entweder embeded sein,
    oder aber der .exe beiliegen.

    Des Weiteren muss natürlich die c++ runtime auf dem Zielrechner vorhanden sein.
    Hierbei stellt sich mir schon die Frage: MUSS zwingend dieselbe Version vorhanden sein?
    Was passiert, wenn stattdessen eine niedrigere minor auf dem Zielsystem liegt?
    Was bei einer höheren? o.O

    Da ich mich bei dem Deployment nicht darauf verlassen kann, dass der User Administrationsrechte hat, verwende ich die Methode aus der MSDN (glaub "XCopy" wurde die genannt?) bei der man die benötigten .dlls einfach mitliefert.


    so weit, so gut, bis daher bin ich gut raus

    Nun beginnt das Ganze aber, für mich unverständlich zu werden

    Wie sieht das "allgemein" mit .net aus? Ich habe .net in der Version 2.0 (mit Updates) installiert und verwende Funktionalitäten davon.
    Heißt das nun, ich muss auf dem Rechner .net 2.0 installiert haben? Oder sind genau das die genannten .dlls a'la msvcr80, msvcp80, msvcm80 ?


    Da ich nun bereits einige Zeit daran hänge, habe ich schon den in VS mitgelieferten "Dependency walker" verwendet um zu sehen, welche Bibliotheken ich eigentlich ausliefern muss.
    Hierbei sehe ich aber, dass in einer release kompilierten Anwendung die msvcp80D.dll geladen wird / werden soll? o.O
    Gibt es eine Möglichkeit, herauszufinden, WARUM meine Applikation diese debug Bibliothek laden möchte?


    Des weiteren, würde mich intressieren, wie das Ganze mit den "nicht .net" spezifischen dlls aussieht.
    So lade ich unter WinXP ganz normal die gdiplus.dll, welche ich zum zeichnen verwende,
    in der neuesten Version auf meinem Entwicklungsrechner.
    Kann ich die ebenfalls mitgeben?
    Oder wie verhält sich das Programm, wenn ich es z.B. unter Win2000 ohne gdiplus auführen möchte?

    Das Problem ist nämlich, wenn ich es unter Server 2003 starte (mit dependency walker) schlägt das Laden der gdiplus.dll fehl ? o.O Obwohl diese auf dem System (halt in einer anderen Version als bei mir) vorhanden ist (im WinSxS Ordner).

    Ebenso hierzu kommt die common control dll (die ich angeblich verwenden soll,
    um "schönere" visuelle Elemente zu bekommen)


    Wäre wundervoll, wenn mich jemand hier aufklären könnte
    mfg
    the incredible Leitman
     
    Meine Blogs:
    theIncredibleLeitman.blogspot.com // Tec
    Gamesdev.de // Gamedevelop

    Ein echter Programmierer hat nur natürliche 3 Feinde:
    • Sonnenlicht
    • Frischluft
    • und das unerträgliche Gebrüll der Vögel

    Ownage
    steht für die Fähigkeit einer Person, andere zu ownen, zum Beispiel „Ich habe die totale ownage.“ Gleichzeitig kann es aber auch die positive Qualität einer Sache beschreiben: „Counterstrike owns!“
    (siehe:http://de.wikipedia.org/wiki/Computerspieler-Jargon)

  2. #2
    MCoder ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Jul 2005
    Ort
    München
    Beiträge
    2.562
    Hallo,

    zunächst stellt sich die Frage, was für eine VC++ - Anwendung du überhaupt erstellst. Was meinst du damit, dass du Funktionalitäten aus .NET2.0 verwendest? Hast du ein CLR-Projekt (z.B. Windows-Forms-Anwendung) erstellt?

    Die von dir genannten DLLs sind die C++ - Laufzeitbibliotheken von VC++; .NET liegt im Windows-Verzeichnis unter Microsoft.NET. Die Installation ist etwas komplexer, als ein paar DLLs zu kopieren.

    Für die Installation auf dem Zielrechner gibt es von Mirosoft Redistributables für alle möglichen Situationen (.NET, MFC, C++, GDI++) zum Download. Da musst du einfach mal suchen.

    Eine Release-kompilierte Anwendung sollte keine Debug-DLLs anziehen. Hast du mal das Projekt bereinigt und dann vollständig neu erstellt?

    Gruß
    MCoder
     
    "The three chief virtues of a programmer are: Laziness, Impatience and Hubris."
    --- Larry Wall

  3. #3
    Avatar von the incredible Leitman
    the incredible Leitman ist offline Mitglied Brokat
    Registriert seit
    Jul 2006
    Ort
    ÖSTERREICH
    Beiträge
    406
    Hey MCoder,

    und erstmal Danke für deine Antwort

    Zitat Zitat von MCoder Beitrag anzeigen
    zunächst stellt sich die Frage, was für eine VC++ - Anwendung du überhaupt erstellst. ... Hast du ein CLR-Projekt (z.B. Windows-Forms-Anwendung) erstellt?
    Ja, genau das
    Die Anwendung ist eine Windows-Forms Anwendung, geschrieben in VC++, compiliert in clr in .net 2.0


    Zitat Zitat von MCoder Beitrag anzeigen
    Die von dir genannten DLLs sind die C++ - Laufzeitbibliotheken von VC++; .NET liegt im Windows-Verzeichnis unter Microsoft.NET. Die Installation ist etwas komplexer, als ein paar DLLs zu kopieren.
    Das habe ich mir schon gedacht :-/
    Aber, wie bekomme ich mit, wenn zB auf dem Zielrechner die .net Version nicht vorhanden ist?
    Würde dann eine entsprechende Fehlermeldung kommen a'la "bitte installieren sie dotnet!" ?
    Nehme ich mal nicht an xD

    Was die Microsoft Redistributables angeht, werde ich mal suchen, was GDI+ angeht,
    die dlls für vc++ kann ich einfach mitliefern, das habe ich schon hinbekommen.

    EDIT:
    okay, ich habe eine redistributable dll für gdi+ gefunden

    Nun frage ich mich, wie ich diese korrekt in die Anwendung einbinde?
    Prinzipiell würde ich es, da vc++ Anwendungen sowieso ein Manifest brauchen, in dieses einbinden?
    Also:
    Code :
    1
    2
    3
    4
    5
    
    <dependency> 
        <dependentAssembly> 
            <assemblyIdentity type="win32" name="Microsoft.Windows.GdiPlus" version="1.0.6002.22509" processorArchitecture="X86" publicKeyToken="6595b64144ccf1df" language="*"/>
        </dependentAssembly> 
    </dependency>
    Ebenso sollte das nun auch für die common Controls library gehen? (comctl32.dll)
    --- /EDIT


    Zitat Zitat von MCoder Beitrag anzeigen
    Eine Release-kompilierte Anwendung sollte keine Debug-DLLs anziehen. Hast du mal das Projekt bereinigt und dann vollständig neu erstellt?
    Ja, das sehe ich auch so, deswegen möchte ich auch die Debug Anforderung rausbekommen.
    Leider weiß ich nicht, WARUM meine Anwendung diese laden möchte o.O
    Kann man das irgendwie über die Projekteinstellungen oder so nachvollziehen?

    Das komplette Projekt neu aufsetzen gestaltet sich ein wenig anstrengend,
    wenn du damit meinst, ein neues Aufsetzen und danach die ganzen files und Einstellungen übernehmen?
    Das komplette "Ding" ist über 2Gig groß und beinhaltes über 800 Files (fast 6 Jahre Entwicklungszeit)
    Geändert von the incredible Leitman (19.03.12 um 11:11 Uhr)
     
    Meine Blogs:
    theIncredibleLeitman.blogspot.com // Tec
    Gamesdev.de // Gamedevelop

    Ein echter Programmierer hat nur natürliche 3 Feinde:
    • Sonnenlicht
    • Frischluft
    • und das unerträgliche Gebrüll der Vögel

    Ownage
    steht für die Fähigkeit einer Person, andere zu ownen, zum Beispiel „Ich habe die totale ownage.“ Gleichzeitig kann es aber auch die positive Qualität einer Sache beschreiben: „Counterstrike owns!“
    (siehe:http://de.wikipedia.org/wiki/Computerspieler-Jargon)

  4. #4
    MCoder ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Jul 2005
    Ort
    München
    Beiträge
    2.562
    Das Projekt neu aufsetzen meinte ich nicht. Du hast ja bei "Erstellen" (wenn du im Projektmappen-Explorer ganz oben stehst) auch Funktionen wie "Projektmappe bereinigen" und "Projektmappe neu erstellen". Vielleicht hilft das ja schon.

    Ich glaube mich zu erinnern, dass bei einer CLR-Anwendung schon eine entsprechende Meldung bei einem fehlenden .NET-Framework erscheint.

    Mit einer .NET2.0-Redistributable-Installation solltest du eigentlich auch ein passendes GDI+ mit auf den PC bekommen, weil .NET das ja auch braucht.

    Gruß
    MCoder
     
    "The three chief virtues of a programmer are: Laziness, Impatience and Hubris."
    --- Larry Wall

  5. #5
    Avatar von the incredible Leitman
    the incredible Leitman ist offline Mitglied Brokat
    Registriert seit
    Jul 2006
    Ort
    ÖSTERREICH
    Beiträge
    406
    Zitat Zitat von MCoder Beitrag anzeigen
    Das Projekt neu aufsetzen meinte ich nicht. Du hast ja bei "Erstellen" (wenn du im Projektmappen-Explorer ganz oben stehst) auch Funktionen wie "Projektmappe bereinigen" und "Projektmappe neu erstellen". Vielleicht hilft das ja schon.
    Ahhh... okay, ich nehme an du meinst im englischen VS die Punkte "clean solution" und "rebuild solution" ?
    hm... klingt nach einer Idee... ich habe öfters seltsame Situationen, die sich aber beheben lassen, wenn ich das komplette Projekt erneut komplett durchkompiliere.
    Werde das mal machen... dauert ungefähr eine Stunde, melde ich mich dann wieder xD


    Zitat Zitat von MCoder Beitrag anzeigen
    Ich glaube mich zu erinnern, dass bei einer CLR-Anwendung schon eine entsprechende Meldung bei einem fehlenden .NET-Framework erscheint.
    Mit einer .NET2.0-Redistributable-Installation solltest du eigentlich auch ein passendes GDI+ mit auf den PC bekommen, weil .NET das ja auch braucht.
    okay super, das wäre fein.
    Denn von einem .net2.0 framework gehen wir mindestens aus, also das muss auf dem Zielrechner vorhanden sein, was bedeutet dass mindestens ein gdi+ auf dem Zielrechner existiert.
     
    Meine Blogs:
    theIncredibleLeitman.blogspot.com // Tec
    Gamesdev.de // Gamedevelop

    Ein echter Programmierer hat nur natürliche 3 Feinde:
    • Sonnenlicht
    • Frischluft
    • und das unerträgliche Gebrüll der Vögel

    Ownage
    steht für die Fähigkeit einer Person, andere zu ownen, zum Beispiel „Ich habe die totale ownage.“ Gleichzeitig kann es aber auch die positive Qualität einer Sache beschreiben: „Counterstrike owns!“
    (siehe:http://de.wikipedia.org/wiki/Computerspieler-Jargon)

  6. #6
    Avatar von the incredible Leitman
    the incredible Leitman ist offline Mitglied Brokat
    Registriert seit
    Jul 2006
    Ort
    ÖSTERREICH
    Beiträge
    406
    Sry, hat nun doch etwas länger gedauert xD

    Jedenfalls ich habe jetzt das komplette Projekt (mit einigen abgeänderten Einstellungen in den projektsettings) nochmal durchkompiliert.
    Zumindest habe ich jetzt ein ordentliches .manifest und kann auf dem Zielrechner ohne Probleme starten (party) ^.^
    Dabei wird nun die mitgegebene vc++ runtime, sowie gdiplus geladen


    Was ich jedoch immer noch nicht verstehe, warum benötigt meine im release kompilierte Anwendung die debug runtimes? o.O
    Gibt es eine Möglichkeit, herauszufinden, WARUM dieses Assembly eingebunden wird?

    mfg
    the incredible Leitman
     
    Meine Blogs:
    theIncredibleLeitman.blogspot.com // Tec
    Gamesdev.de // Gamedevelop

    Ein echter Programmierer hat nur natürliche 3 Feinde:
    • Sonnenlicht
    • Frischluft
    • und das unerträgliche Gebrüll der Vögel

    Ownage
    steht für die Fähigkeit einer Person, andere zu ownen, zum Beispiel „Ich habe die totale ownage.“ Gleichzeitig kann es aber auch die positive Qualität einer Sache beschreiben: „Counterstrike owns!“
    (siehe:http://de.wikipedia.org/wiki/Computerspieler-Jargon)

  7. #7
    MCoder ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Jul 2005
    Ort
    München
    Beiträge
    2.562
    Benutzt das Programm noch irgendwelche externen Komponenten, also DLLs oder statischen Libs? Wenn ja, liegt vermutlich irgendeines dieser Teile als Debug-Version vor.

    Gruß
    MCoder
     
    "The three chief virtues of a programmer are: Laziness, Impatience and Hubris."
    --- Larry Wall

  8. #8
    Avatar von the incredible Leitman
    the incredible Leitman ist offline Mitglied Brokat
    Registriert seit
    Jul 2006
    Ort
    ÖSTERREICH
    Beiträge
    406
    Danke nochmal MCoder, dass du dir soviel Zeit nimmst

    Nunja, ich verwende externe dlls,
    zum einen einige von Component One (die da wären C1Pdf, C1FlexGrid, C1Command),
    das Excel Api (Interop.Excel.1.5 und MSORUNLib.1.0)
    und die Standard Referenzen wie System, System.Configuration, System.Xml, System.Drawing usw...

    Ansonsten binde ich externe dlls von ACE, TAO ein,
    die aber alle in Release kompiliert wurden.

    Aber soweit ich informiert bin werden Debug libraries mit dem Abschluss %d.dll benannt?
     
    Meine Blogs:
    theIncredibleLeitman.blogspot.com // Tec
    Gamesdev.de // Gamedevelop

    Ein echter Programmierer hat nur natürliche 3 Feinde:
    • Sonnenlicht
    • Frischluft
    • und das unerträgliche Gebrüll der Vögel

    Ownage
    steht für die Fähigkeit einer Person, andere zu ownen, zum Beispiel „Ich habe die totale ownage.“ Gleichzeitig kann es aber auch die positive Qualität einer Sache beschreiben: „Counterstrike owns!“
    (siehe:http://de.wikipedia.org/wiki/Computerspieler-Jargon)

  9. #9
    MCoder ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Jul 2005
    Ort
    München
    Beiträge
    2.562
    Bei Third-Party-Komponenten sehe ich weniger das Problem, aber vielleicht erstellt ihr ja auch Komponenten aus eigenen Projekten ?

    Aber soweit ich informiert bin werden Debug libraries mit dem Abschluss %d.dll benannt?
    Was auch hoffentlich jeder weiß, der solche Teile in den Umlauf bringt

    Es kann ja nicht schaden, alle Komponenten mal mit dem Dependency Walker zu checken. Ansonsten habe ich jetzt auch keine weiteren Ideen.

    Gruß
    MCoder
     
    "The three chief virtues of a programmer are: Laziness, Impatience and Hubris."
    --- Larry Wall

  10. #10
    Avatar von the incredible Leitman
    the incredible Leitman ist offline Mitglied Brokat
    Registriert seit
    Jul 2006
    Ort
    ÖSTERREICH
    Beiträge
    406
    hm... vielleicht könnte ich dir noch ein wenig deiner Zeit stehlen (blush)

    Weißt du eventuell, WIE die automatische .manifest Generierung bei VS2005 Vc++ Projekten zustande kommt?

    Ich habe gesehen, dass ich stellenweise Komponenten aus dem System:iagnostics namespace verwende (wie Stopwatch oder Write).
    Kann das dazu führen, dass dewegen die Debug runtimes eingebunden werden?
     
    Meine Blogs:
    theIncredibleLeitman.blogspot.com // Tec
    Gamesdev.de // Gamedevelop

    Ein echter Programmierer hat nur natürliche 3 Feinde:
    • Sonnenlicht
    • Frischluft
    • und das unerträgliche Gebrüll der Vögel

    Ownage
    steht für die Fähigkeit einer Person, andere zu ownen, zum Beispiel „Ich habe die totale ownage.“ Gleichzeitig kann es aber auch die positive Qualität einer Sache beschreiben: „Counterstrike owns!“
    (siehe:http://de.wikipedia.org/wiki/Computerspieler-Jargon)

  11. #11
    MCoder ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Jul 2005
    Ort
    München
    Beiträge
    2.562
    Also, mit den Details der Manifest-Generierung habe ich mich noch nicht näher befasst. Da kann ich dir leider nix Genaues sagen.

    Dass der Diagnostics-Namespace die Debug-Librariers anzieht, denke ich nicht. Mit einem kleinen Testprogramm sollte sich das aber schnell prüfen lassen.

    Gruß
    MCoder
     
    "The three chief virtues of a programmer are: Laziness, Impatience and Hubris."
    --- Larry Wall

  12. #12
    Avatar von the incredible Leitman
    the incredible Leitman ist offline Mitglied Brokat
    Registriert seit
    Jul 2006
    Ort
    ÖSTERREICH
    Beiträge
    406
    Na gut,
    dann erstmal herzlichen Dank MCoder, für deine Hilfestellung

    Ich werde noch ein wenig mit unterschiedlichen Projectsettings testen,
    wenn ich etwas rausbekomme melde ich mich wieder und poste meine Errungenschaften ^.^
     
    Meine Blogs:
    theIncredibleLeitman.blogspot.com // Tec
    Gamesdev.de // Gamedevelop

    Ein echter Programmierer hat nur natürliche 3 Feinde:
    • Sonnenlicht
    • Frischluft
    • und das unerträgliche Gebrüll der Vögel

    Ownage
    steht für die Fähigkeit einer Person, andere zu ownen, zum Beispiel „Ich habe die totale ownage.“ Gleichzeitig kann es aber auch die positive Qualität einer Sache beschreiben: „Counterstrike owns!“
    (siehe:http://de.wikipedia.org/wiki/Computerspieler-Jargon)

Thema nicht erledigt

Ähnliche Themen

  1. WAR deployment
    Von torax13 im Forum Java
    Antworten: 0
    Letzter Beitrag: 25.05.09, 13:51
  2. Deployment mit der J2EE Deployment API (JSR88)
    Von Boemm im Forum Enterprise Java (JEE, J2EE, Spring & Co.)
    Antworten: 6
    Letzter Beitrag: 26.06.07, 18:19
  3. Error on deployment of EJB
    Von AnetaGueogui im Forum Java
    Antworten: 0
    Letzter Beitrag: 21.06.07, 17:52
  4. Deployment Problem
    Von Germu im Forum Enterprise Java (JEE, J2EE, Spring & Co.)
    Antworten: 4
    Letzter Beitrag: 23.10.06, 10:46
  5. Deployment Kit
    Von Stephan Zesiger im Forum Flash Plattform
    Antworten: 6
    Letzter Beitrag: 18.10.02, 00:13