Setup Projekt mit VS2019: erforderliche Komponenten ...



  • Hallo zusammen,
    unter dem alten VS2005 wurden die erforderlichen Libs noch direkt in das Setup-Verzeichnis, in ein eigenen "Windows"-Verzeichnis kopiert und gut wars.

    Leider bekomme ich das mit VS2019 nicht mehr hin.
    Es will stattdessen auf die vc_redist.x86.exe zugreifen, für die aber leider der Quellpfad nicht angegeben werden kann.
    Jedenfalls ich habe keine Lösung dafür gefunden.
    Keiner der drei Radio-Buttons unter "Erforderliche Komponenten" geht.
    Der letzte Radio-Button (...von folgendem Speicherort...) kommt jedenfalls gar nicht infrage.

    Kann hier bitte jemand helfen.

    Nebenbei bemerkt:
    Die "Detected Dependencies" des Setup-Projekts bleiben bei mir fast konsequent leer. NATÜRLICH OHNE FEHLERMELDUNG!
    Bis auf 3 oder 4 kurze Male. Da wurden sie angezeigt, um dann auch gleich wieder zu verschwinden. Keine Ahnung warum.
    Ich kann aber das "Setup-Projekt" erstellen und damit auch installieren.
    Wenn aber das entsprechende "Redistributable" auf dem Zielsystem nicht vorhanden ist, läuft meine Anwendung natürlich nicht.
    Bei meinem VS2005 sind da immer die Libs aufgeführt, und das Zielsystem wird entsprechend upgedatet.

    Weiterhin bin ich mir sicher, zu meinem deutschen VS2019 auch die "Erweiterung "Installer Projects" in deutsch gewählt zu haben.
    Dennoch präsentiert sich das Ding in englischer Sprache.
    Was geht da vor? -- Oh. Es taucht in der Komponenten-Auswahl nur eine englische auf??



  • @elmut19
    Also das Setup Projekt findet einfach seine Abhängigkeiten nicht!
    Habe auch versucht, ein neues anzulegen.
    Normalerweise müssten, sobald eine "primäre Ausgabe" eingefügt wird,
    auch deren Abhängigkeiten erkannt und zu den "Detected Dependencies" hinzugefügt werden.
    Bei mir geht das nicht!
    Woran kann das liegen?

    Oder wenn das nicht geht wäre meine nächste Frage:
    Wie funktioniert das mit "Erforderliche Komponenten aus Speicherort der Anwendung"?
    Alle Beschreibungen, die ich dazu finde, sind völlig sinnfrei!
    Man kann angeben, was man will. Es wird nix gefunden.
    Irgendwie sollte das ja mit dem "Redistributable" vc_redist.x86.exe" gehen.
    Ich kappiers nicht!!

    ERROR: Um "Erforderliche Komponenten von demselben Speicherort wie die Anwendung herunterladen" im Dialogfeld "Erforderliche Komponenten" aktivieren zu können, muss die Datei "vcredist_x86\vc_redist.x86.exe" für das Element "Visual C++ "14" Runtime Libraries (x86)" auf den lokalen Computer heruntergeladen werden. Weitere Informationen finden Sie unter http://go.microsoft.com/fwlink/?LinkId=616018.

    Selbstverständlich habe ich dieses Redistributable dort rein kopiert.
    Auch in einen unterpfad, wie angegeben.
    Aber trotzdem gehts nicht.

    Nachtrag:
    Hab nun etwas länger rumstudiert.
    Ergebnis: Das mit dem "Erforderliche Komponenten aus Speicherort der Anwendung" ist indiskutabel, da es den Anschein hat, dass man doch die einzelnen dlls ins Anwendungsverzeichnis des Ziel-Computers kopieren muss, wie andere Dateien auch.
    Oder habe ich das auch falsch verstanden?

    -> Die einzige vernünftige Variante ist also, dass ich die "Dependencies" vom Visual Studio ermittelt bekomme.
    Und die müssen dann einfach über mein "Setup" zentral im Ziel-Computer installiert werden,
    so dass sie auch über das "Windows Update" mit verwaltet werden.



  • Ich habe weiter rumprobiert.
    Nun auf meinem eigenen PC (VS2019, c++) ein neues WindowsProjekt (c++) angelegt und dann ein Setup hinzugefügt.
    Zunächst habe ich die "primäre Ausgabe" in den "Application folder" integriert.
    Mit dieser Aktion haben sich dann auch die ganzen benötigten DLL´s in diesen "Application folder" hinzugesellt.
    Diese wurden sogleich auch in den "Detected Dependencies" angezeigt.

    Habe aber nicht gleich probiert, das "Setup" zu erstellen, um zu sehen, ob die dll´s auch da hinzugebunden werden.

    Denn dann bin ich auf die Idee gekommen, in den "Prerequisits" die "C++14 Libs" anzukreuzen.
    Und damit wars das auch schon!
    Alle dll´s sind wieder verschwunden. Aus den "Detected Dependencies" und dem "Application Folder".
    Rückgängig machen ist auch nicht.
    Nun bekomm ich nix mehr zurück.

    Stimmt nun etwas mit dem Visual Studio (Community Edition) nicht oder mit mir.
    Was habe ich nicht verstanden? Was mache ich falsch? Was muss ich tun, damit ich die Dinger wieder bekomme?
    Und vor allem, wie bekomme ich ein vollständigs Setup?



  • Ich habe noch nie mit Visual Studio ein Setup erstellt, sondern nutze ein anderes Tool dafür, aber MS hat eigentlich eine ganz brauchbare Doku dafür, finde ich: https://docs.microsoft.com/en-us/cpp/windows/walkthrough-deploying-a-visual-cpp-application-by-using-a-setup-project?view=msvc-160



  • @Schlangenmensch
    Vielen Dank für Deine Antwort.
    Einen grossen Teil dieser Doku habe ich schon gelesen.
    Aber eigentlich finde ich das (fast alles) nicht so recht relevant.
    Da wird immer wieder auf die "Redistrib´s und "Merge Modules" verwiesen,
    also alles, was man irgendwie zusätzlich bei der Installation anstossen muss.

    Aber mir kommt es drauf an, dass das VisualStudio für mich die nötigen "System-DLLs"
    herausfindet und sie, wie früher im VisualStudio 2005, separat in ein "Windows"-Verzeichnis im Setup
    kopiert, von dem sie zentral ins Windows integriert werden, so dass sie dort über "Windows Update"
    weiter verwaltet werden.

    Grundssätzlich entspricht dies dem Vorgang, wenn ich das entsprechende Redistrib "vcredist_x86.."
    oder so von Hand installiere (evtl mit weniger DLLs, weil nicht benötigt).

    Die "Installer-Extensions" der beiden VisualStudios 2005 und 2019 sehen und funktionieren schliesslich
    sehr sehr ähnlich. Also warum findet das neue VS diese Dependencies nicht?

    Aber vielleicht funktioniert Dein Setup-Tool?
    Welches wäre das?



  • @elmut19 sagte in Setup Projekt mit VS2019: erforderliche Komponenten ...:

    Aber mir kommt es drauf an, dass das VisualStudio für mich die nötigen "System-DLLs"
    herausfindet und sie, wie früher im VisualStudio 2005, separat in ein "Windows"-Verzeichnis im Setup
    kopiert, von dem sie zentral ins Windows integriert werden, so dass sie dort über "Windows Update"
    weiter verwaltet werden.

    Das sind keine System-DLLs. Und ob die VCRuntime Merge-Modules von Windows-Update mit upgedated werden, das weiss ich nicht.

    Auch werden bei neueren VS Versionen (ab 2005) die Runtime-DLLs nicht mehr ins Windows bzw. System32 Verzeichnis kopiert. Die landen im Windows component store (SxS).

    Grundssätzlich entspricht dies dem Vorgang, wenn ich das entsprechende Redistrib "vcredist_x86.."
    oder so von Hand installiere (evtl mit weniger DLLs, weil nicht benötigt).

    VCRedist macht soweit ich weiss auch nix anderes als die entsprechenden Merge-Modules zu installieren.



  • @hustbaer
    Vielen Dank Hustbaer.
    Wenn man das "Setup"-Projekt einrichtet, hat man ja (wie auch beim VS2005) drei Möglichkeiten.
    Bei der obersten (benötigte DLLs von der Website des Herstellers) oder so ähnlich, hat bei VS2005
    das VS die DLLs gesammelt und bei der Installation auf den Zielrechner verteilt. In der Microsoft Doku
    steht ja, dass man eine Variante wählen soll, die dem Windows Update erlaubt, anschliessend diese
    DLLs zu verwalten.

    Und das ist ja bei der zweiten Variante (... Komponenten aus Speicherort der Anwendung ..)
    nicht der Fall. Und ich muss mir die Dinger selber aus meinem Rechner raussuchen!

    Und die dritte Variante (... von folgendem Speicherort runterladen ...) habe ich nicht verstanden.
    Und ausserdem darf es per Konvention keinen externen Speicherort geben.
    Die Anwendung muss auf einem Rechner installierbar sein, der keine Verbindung zum Internet hat.

    Unter VS 2005 hat das alles funktioniert.
    Und bei den "Prerequisits" habe ich dort den obersten Radio-Button (von vendors Website herunterladen ...)
    angeklickt. Es werden alle Microsoft DLLS gefunden, die nötig sind und ins "Setup" reingepackt.
    Sowas brauche ich eben wieder. Und ich habe ebenfalls keine der Checkboxen bei den "Choose prerequisites ..."
    angeklickt. Wo sie letztlich im System des Zielrechners landen ist mir eigentlich egal. Es ist jedenfalls nicht
    das erstellte Anwendungsverzeichnis. Und das ist mir eigentlich wichtig.



  • @hustbaer
    Ich habe dann ein einfaches "Hello World" als MFC Anwendung erstellt.
    Da drin habe ich dann das Setup Projekt dazu erstellt.
    Alles mit den minimalsten Clicks. Keine Einstellungen dabei ergänzt oder verändert
    Nur die "Primäre Ausgabe" ins Applikations-Verzeichnis integriert.
    Die "Dependencies" wurden dabei aufgelistet!

    Dann habe ich das "Setup" erstellt.
    Als Resultat bekam ich auch die "Setup.exe" mit der ".msi" und der zu installierenden Anwendung.
    Nur die Windows-DLLs fehlten.
    Ausserdem verschwanden nach dem Erstellen alle "Dependencies" wieder aus ihrer Liste.
    Danach bekommt man sie auch nicht wieder rein.
    Wenn ich allerdings das "Setup"-Projekt komplett lösche und es neu erstelle,
    bekomme ich wieder die Auflistung der "Dependencies", und alles beginnt von vorne.
    Ich habe es, neben meinem Computer in der FIrma auch auf meinem eigenen ausprobiert.
    Ist alles dasselbe.
    Ich kanns mir leider nicht erklären.

    Liegt es an der Community-Edition? Und ich brauche eine "Professional-Edition"?



  • Das scheint mit VS 2019 einfach nicht mehr automatisch zu gehen. Muss man nicht gut finden, ist aber wohl so.
    Kannst du fixen indem du z.B. die Merge Modules zum Setup Projekt hinzufügst.

    1. Visual Studio Paket für die Merge Modules installieren.
      Dazu den VS Installer starten und unter "Individual components" die Komponenten "C++ 2019 Redistributable MSMs" und "C++ 2019 Redistributable Update" installieren.

    2. Merge Modules deinem Setup Projekt hinzufügen
      Rechtsklick auf das Setup Projekt, Add Merge Modules...
      C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Redist\MSVC\v142\MergeModules
      und von dort dann

    Microsoft_VC142_CRT_x64.msm
    Microsoft_VC142_MFC_x64.msm
    Microsoft_VC142_MFCLOC_x64.msm
    

    Ob das letzte Paket wirklich nötig ist weiss ich nicht, hab's nur mal schnell mit diesen 3 probiert.

    Was nicht schön ist, ist dass dabei der Pfad C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Redist\MSVC\v142\MergeModules fix in das Setup Projekt-File geschrieben wird. Das Projekt ist dadurch abhängig davon dass die Files auch genau dort liegen. Auch nicht schön. Keine Ahnung wie man das am besten behebt.


    Alternativ dazu kannst du die VCRedist EXEn verwenden. Der Nachteil dabei ist dann aber dass VCRedist nach dem Installieren deiner Anwendung als eigene installierte Anwendung gelistet wird. Der Benutzer kann VCRedist dann auch einzeln de-installieren - wonach dann deine Anwendung nicht mehr starten würde.

    Wie man die VCRedist Pakete in ein Setup Projekt integriert hab' ich mir nicht angesehen.



  • @elmut19 sagte in Setup Projekt mit VS2019: erforderliche Komponenten ...:

    Aber vielleicht funktioniert Dein Setup-Tool?
    Welches wäre das?

    Ich nutze Inno Setup. Aber ich füge alle DLLs im Prinzip manuell hinzu (via Skript) und habe alle benötigten DLLs dann im Ordner der Anwendung. Also, keine Installation in irgendwelche Windows Ordner, und kein automatisches herausfinden der benötigten DLLs.



  • Ja man muss dieses fucking tool extra installieren, wir sind jedoch alle sehr froh das es dies wieder gibt, es wurde nämlich zwischenzeitlich an einen GeldHai verborgt, seit 2019 ist es wieder dabei, und man tut gut dran jedwedes Setup damit zu gestalten.

    Man kann es nachinstallieren im VS Menu/Extensions/Manage-Extensions - Dort in Suche Setup eingeben.

    Es erscheint eine wirre liste mit lauter setup tools, das einzig richtige hier ist der Name ;*
    Microsoft Visual Studio Installer Projcts xxx

    Fraglich warum man hier keine Bilder hochladen kann, scheinbar platte voll wa ^^ loool..



  • @KahnSoft sagte in Setup Projekt mit VS2019: erforderliche Komponenten ...:

    Fraglich warum man hier keine Bilder hochladen kann

    Niemand braucht hier Bilder. Außer Du und ähnlich bemitleidenswerte Zeitgenossen.



  • @hustbaer
    Vielen Dank Hustbaer!
    Das bringt wenigstens Klarheit in die Situation.
    Dann werd ich das eben ausprobieren



  • @Schlangenmensch
    Auch Dir vielen Dank Schlangenmensch.
    Und ja, das wäre nicht die Methode meiner Wahl.
    Ich probier erstmal das von Hustbaer.



  • @hustbaer
    Ich habe die Installation auf einem mit VS2019 unverseuchtem Win7 probiert.
    Die Installation lies sich durchführen, und das Programm startet auch.
    Ebenfalls sind die Verschlüsselungs-Libs dabei, mit denen ich ein Passwort
    verschlüsselt in einer INI ablege. Mit dem vorherigen Setup startete es nicht.

    Allerdings meldete sich das Setup mit einer Warnung, es müsste System-Dateien updaten
    und ob man fortfahren oder abbrechen oder ?? will.
    Hm... Das verwirrt jedenfalls so manchen Installateur. Nicht so gut!
    Ich habe auf "trotzdem installieren" geklickt, und es ging.



  • @elmut19 Ich würde empfehlen für Tests von Installern VMs zu verwenden. Damit ist es super einfach auf "unverseuchten" Systemen zu testen. Ich persönlich verwende Hyper-V als Hypervisor, was ab der "Professional" Version von Windows mit dabei sein sollte. VirtualBox ist aber auch OK und gratis -> gute Alternative wenn man nur eine "Home" Version von Windows hat.

    Allerdings meldete sich das Setup mit einer Warnung, es müsste System-Dateien updaten
    und ob man fortfahren oder abbrechen oder ?? will.

    OK, keine Ahnung worum es da geht. Ich hatte Installation nur auf einem Windows 10 System ohne VS 2019 DLLs probiert. Dort ist keine solche Meldung gekommen.

    Hm... Das verwirrt jedenfalls so manchen Installateur. Nicht so gut!

    Ja, da wirst du Recht haben. Google selbst mal ob es ne Lösung dafür gibt, und wenn du nichts findest, dann poste die Meldung hier.



  • @Schlangenmensch sagte in Setup Projekt mit VS2019: erforderliche Komponenten ...:

    Also, keine Installation in irgendwelche Windows Ordner, und kein automatisches herausfinden der benötigten DLLs.

    Die DLLs einfach neben die Anwendung hinlegen funktioniet mit den Visual Studio runtime DLLs ab spätestens VS 2005 nur mehr wenn man die runtime DLLs selbst gebaut hat. Die mitgelieferten runtime DLLs müssen im SxS installiert werden damit sie gefunden werden.

    Also entweder merge modules oder VCRedist oder runtime DLLs selbst bauen.



  • @hustbaer sagte in Setup Projekt mit VS2019: erforderliche Komponenten ...:

    Also entweder merge modules oder VCRedist oder runtime DLLs selbst bauen.

    Redistributables sind doch auch "nur" DLLs, und die neben die Anwendung legen funktioniert noch. Auch wenn das nicht der von Microsoft empfohlene Weg ist.



  • @hustbaer sagte in Setup Projekt mit VS2019: erforderliche Komponenten ...:

    @elmut19 Ich würde empfehlen für Tests von Installern VMs zu verwenden. Damit ist es super einfach auf "unverseuchten" Systemen zu testen. Ich persönlich verwende Hyper-V als Hypervisor, was ab der "Professional" Version von Windows mit dabei sein sollte. VirtualBox ist aber auch OK und gratis -> gute Alternative wenn man nur eine "Home" Version von Windows hat.

    Allerdings meldete sich das Setup mit einer Warnung, es müsste System-Dateien updaten
    und ob man fortfahren oder abbrechen oder ?? will.

    OK, keine Ahnung worum es da geht. Ich hatte Installation nur auf einem Windows 10 System ohne VS 2019 DLLs probiert. Dort ist keine solche Meldung gekommen.

    Hm... Das verwirrt jedenfalls so manchen Installateur. Nicht so gut!

    Ja, da wirst du Recht haben. Google selbst mal ob es ne Lösung dafür gibt, und wenn du nichts findest, dann poste die Meldung hier.

    Ich arbeite da mit VMWare. Es dauert aber, bis ich wieder an die Original-Installation komme.
    Bei einem zweiten Installationsversuch, nachdem ich Anwendung und Redist deinstalliert hatte,
    kam diese Meldung nicht mehr.
    Also ich hatte davor das "Redist für VS2015 bis 2019" installiert. Das hat aber (habs getestet) diesen
    "Pre-Updatewunsch ?" des Systems nicht ausgelöst. Ich weiss also nicht, ob ich das wieder so wieder hinbekomme.
    Die Merge Module werden jedenfalls nicht im Anwendungsverzeichnis installiert, was schon mal gut ist.

    Nachtrag:
    Ich kann auch dieses Redist wieder deinstallieren, ohne die installierte Anwendung dadurch unbrauchbar zu machen.
    Startet also trotzdem noch.
    Wenn ich aber die Anwendung deinstalliere und im Anschluss die Anwendung einfach wieder draufkopiere,
    ohne sie zu installieren, funktioniert sie nicht.
    Und ein anschliessendes Nachinstallieren dieses Redists bringt die Anwendung wieder in Gang.

    Also, da diese Merge Module in irgendeinem Systemverzeichnis liegen, hoffe ich, dass sie gegebenenfalls
    auch durch Windows Update gewartet werden.

    Also nochmals vielen herzlichen Dank für eure Hilfe



  • @elmut19 sagte in Setup Projekt mit VS2019: erforderliche Komponenten ...:

    Ich arbeite da mit VMWare. Es dauert aber, bis ich wieder an die Original-Installation komme.
    Bei einem zweiten Installationsversuch, nachdem ich Anwendung und Redist deinstalliert hatte,
    kam diese Meldung nicht mehr.
    Also ich hatte davor das "Redist für VS2015 bis 2019" installiert. Das hat aber (habs getestet) diesen
    "Pre-Updatewunsch ?" des Systems nicht ausgelöst. Ich weiss also nicht, ob ich das wieder so wieder hinbekomme.

    Naja, ein Vorteil von VMs ist ja dass man da Snapshots machen kann. Ich hab da VMs mit allen interessanten Windows Versionen, und jede VM hat nen Snapshot der RTM Installation ohne weitere Windows Updated oder sonst was installiert. Testen einer Installation auf einem frischen System ist dann super einfach: Revert auf den Snapshot, Installationsfiles draufkopieren und starten.

    Ich kann auch dieses Redist wieder deinstallieren, ohne die installierte Anwendung dadurch unbrauchbar zu machen.
    Startet also trotzdem noch.

    Wenn du auf einem frischen Windows nur eine Anwendung installierst, die die VS DLLs mit dem VCRedist installiert, und danach das VCRedist deinstallierst, dann lässt sich die Anwendung danach nicht mehr starten.

    Es sei denn die Anwendung würde sowohl das VCRedist als auch die Merge Module installieren, oder es sind noch andere Anwendungen installiert die Merge Module verwenden.

    Also, da diese Merge Module in irgendeinem Systemverzeichnis liegen, hoffe ich, dass sie gegebenenfalls
    auch durch Windows Update gewartet werden.

    Ich würde eher davon ausgehen dass das nicht passiert. Kann's aber nicht sicher sagen.


Log in to reply