none
Anwendung läuft nicht auf Rechnern ohne Installation von Visual C++ RRS feed

  • Frage

  • Guten Tag,

    ein neu entwickeltes Programm (Release x86, MFC eingebunden) läuft nicht auf Rechnern, welche Visual C++ nicht installiert haben. Fehlermeldung: "mfc100.dll fehlt". Aus dem Internet erfuhr ich, daß Redistributable Package (x64, x86) installiert sein müsse. Diese beiden habe ich auf einem Visual V++ freien Rechner (x64) nun installiert. Leider ohne Erfolg. Kann mir jemand bitte sagen, was da fehlt?

    Gruß
      Klaus.


    M. Thaddaeus


    • Bearbeitet m-thaddaeus Sonntag, 6. November 2016 06:33
    Sonntag, 6. November 2016 06:33

Antworten

  • Guten Abend Bordon,

    leider war mir unbekannt, daß die Einstellungen der einzelnen Projekte unterschiedlich im Debug und Release sein können. Ich habe das bei den beiden DLL's natürlich korrigiert und bin nun gespannt auf das Ergebnis meines Tests auf "jungfräulichen" Rechnern. Diese Test können erst Ende dieser Woche stattfinden. Ich werde Euch das Ergebnis mitteilen.

    In jedem Fall habe ich mal wieder was gelernt! Man kann so alt werden wie Methusalem - und ich bin schon ziemlich alt (!), aber man lernt nie aus. Jedenfalls bin ich Dir für Deine Aufmerksamkeit sehr dankbar. Ich hätte das ja auch sehen können, und das Ärgert mich doch etwas.

    Gruß
       Klaus.


    M. Thaddaeus

    • Als Antwort markiert m-thaddaeus Mittwoch, 30. November 2016 05:37
    Montag, 21. November 2016 16:15
  • Guten Morgen miteinander,

    danke für viel Geduld und Hilfe! Es ist geschafft!!! Meine Anwendung läuft auf diversen Rechnern mit unterschiedlichen Windows Systemen von Vista bis Win 10, x32 oder x64 einwandfrei.

    Herzlichen Dank,

       Klaus.


    M. Thaddaeus

    • Als Antwort markiert m-thaddaeus Mittwoch, 30. November 2016 05:41
    Mittwoch, 30. November 2016 05:41

Alle Antworten

  • Hallo Klaus,

    hast Du auch die richtigen verwendet?

    Die MFC Downloads sind häufig separat und die Version sollte passen, siehe Die neuesten unterstützten Visual C++-Downloads.

    Gruß Elmar

    Sonntag, 6. November 2016 11:15
  • Hallo M. Thaddaeus

    Das was Elmar gesagt hat sollte Dein Problem beheben, Du mußt für Deine Anwendung das entsprechende Redistributable Paket installieren. Du solltest auch nicht vergessen, dass Du auf x64 Maschinen bei einer 32 Bit Anwendung das x86 Redistributable installieren mußt.

    Wenn Du diese Abhängigkeit nicht möchtest, dann mußt Du mit der statischen MFC linken. Das macht die Anwendung größer, aber es wird keine VC Redist benötigt. Was nun besser ist ist eine subjektive Entscheidung.

    Noch zu dem Problem, dass trotz der Installation des Redist Paketes Deine Anwendung nicht tut:

    Hast Du auf Deinem PC auch wirklich die VC2010 Redist Pakete installiert? Da wäre nämlich die MFC100.dll drin. Dann als nächste Frage, ist es wirklich die MFC100.DLL, die fehlt, oder ist es die MFC100D.dll?


    Best regards

    Bordon

    Note: Posted code pieces may not have a good programming style and may not perfect. It is also possible that they do not work in all situations. Code pieces are only indended to explain something particualar.

    Montag, 7. November 2016 06:17
  • Guten Tag Elmar, guten Tag Bordon,

    meine Anwendung ist mit der statischen MFC im x86 Modus gelinkt, trotzdem läuft es auf bisher fremden Rechnern nicht. Auf einem der Rechner (x64) habe ich beide Redistributale Packages installiert! Auf dem bekomme ich überhaupt keine Reaktion nach Start meiner Anwendung, nicht mal eine Fehlermeldung, einfach gar nichts!

    Ich arbeite mit Visual C++ 2010 Pro auf Windows 10 Pro. Die von Elmar vorgeschlagenen Packages für mein System habe ich mir heruntergeladen wobei ich etwas durcheinander geraten bin mit vcredistx64.exe ind vcredist_iax64.exe. Was ist da der Unterschied? Muß ich auf x64 Systemen alle drei installieren?

    Bei der Installation auf x64 Rechnern muß man da eine Reihenfolge bei den Installationen beachten, z.B. *x86.exe vor *.x64.exe oder umgekehrt?

    Jedenfalls danke ich Euch beiden sehr für Eure geduldige Hilfe und denke, daß ich auch dieses Problem mit Eurer Hilfe lösen werde, wie so einige vorher. 

    Gruß
       Klaus.


    M. Thaddaeus

    Montag, 7. November 2016 09:01
  • Ja wenn die Anwendung mit der Statischen Lib gelinkt ist hat die Anwendung keine Abhängigkeiten zu MFC*.DLL. Irgendwie hört sich da was merkwürdig an.

    Bitte lade dieses Tool herunter:

    http://dependencywalker.com

    Öffne dann Deine Anwendung damit, und poste hier mal den Screenshot von dem Treeview, der in dem linken oberen Bereich ist. Es reicht die 1. Ebene des Trees.


    Best regards

    Bordon

    Note: Posted code pieces may not have a good programming style and may not perfect. It is also possible that they do not work in all situations. Code pieces are only indended to explain something particualar.


    • Bearbeitet Bordon Montag, 7. November 2016 09:47
    Montag, 7. November 2016 09:46
  • Guten Morgen Bordon,

    die Testanwendung habe ich heruntergeladen und habe damit meine Anwendung (Release) geladen. Leider habe ich auf meinen beiden Rechnern Visual C++ 2010 installiert, aber auch hier zeigt er in der 3. oder 4. Ebene (gelb) DLL's an, welche er nicht findet, obgleich das Programm einwandfrei läuft.

    Der Screenshot ist nicht vollständig. Darunter geht es munter weiter!

    In der 1. und 2. Ebene werden keine Fehler angezeigt. Ich muß mir nun einen fremden Rechner vornehmen, auf welchem VC++ nicht installiert ist und den Versuch wiederholen. Das wird ein leider paar Tage dauern.

    Gruß
       Klaus.


    M. Thaddaeus

    Samstag, 12. November 2016 07:46
  • Hallo m-thaddaeus,

    wenn Du x86 kompilierst muss es das x86 Redistributable Paket sein, ein x64 Redistributable Paket hilft dort nichts.

    Zum testen braucht es keinen fremden Rechner, eine virtuelle Maschine reicht völlig aus.

    Wenn Dir gemeldet wird das "Fehlermeldung: "mfc100.dll fehlt", dann schaue doch mit dem Dependency Walker welche Komponente diese DLL nutzen will - der Pfad sollte im Baum sichtbar sein.

    Gruß


    - Florian

    Montag, 14. November 2016 10:20
  • Hallo M. Thaddaeus, also irgendwie sehe ich keinen Screenshot.

    Wie ich ja sagte, wenn Du mit der statischen MFC Library gelinkt hast gibt es keine Abhängigkeiten zu irgendwelchen DLLs, die im VC Redist sind. Hast Du andere Eigene oder 3rd Party DLLs mit der Anwendung im Einsatz, die vielleicht anders gelinkt sind?


    Best regards

    Bordon

    Note: Posted code pieces may not have a good programming style and may not perfect. It is also possible that they do not work in all situations. Code pieces are only indended to explain something particualar.

    Montag, 14. November 2016 18:23
  • Guten Morgen Bordon,

    "irgendwie" hast Du recht! Ich habe da wohl Mist gebaut. Entschuldige bitte, ich mache das mit den Grafiken zum ersten Mal. Also auf zu einem neuen Versuch der hoffentlich klappt! Wie gesagt, das Programm läuft auf meinem Entwicklungsrechner.

    Gruß
       Klaus.



    M. Thaddaeus

    Dienstag, 15. November 2016 08:30
  • Demnach ist RPwMgr.exe direkt von der mfc100.dll (x64) abhängig und findet diese nicht auf dem System.

    Es ist also nicht x86 kompiliert und auch nicht statisch gelinkt -> es wird das passende x64 Redistributable Paket benötigt, hierbei auch auf das Service Pack achten.


    - Florian

    Dienstag, 15. November 2016 08:39
  • Ja also dass Du beim Linken mit der statischen MFC Bibliothek trotz dem die MFC100.DLL bindest ist höchst merkwürdig. Ich würde Dir Raten alle Einstellungen des Projektes sehr gründlich zu prüfen.

    Da sind nicht wirklich viele Optionen wo man das einstellen kann. Eigentlich ist nur in den Projekteinstellungen unter General in den Projekt Defaults die Option "Use of MFC". Da kann man die statische oder shared library wählen.

    Übrigens, da Deine Anwendung 64 Bit ist, mußt Du die 64 Bit Version der VC++2010 Redistributable installieren. Es gibt da zwei Versionen die für x86 und die für x64. Einfacherweise installiert man auf 64 Bit Maschninen gleich beide die 32 Bit und die 64 Bit.


    Best regards

    Bordon

    Note: Posted code pieces may not have a good programming style and may not perfect. It is also possible that they do not work in all situations. Code pieces are only indended to explain something particualar.

    Dienstag, 15. November 2016 08:46
  • Hallo Bordon,

    ich habe mich an Deine Vorschläge gehalten und allse noch einmal kontrolliert und danach die Anwendung erneut compiliert und gelinkt (Release!). Die weitere Überprüfung ergab, daß die mfc100.dll in Depends.exe nicht mehr vorkam. Allerdings waren an einigen Stellen noch Hinweise auf nicht vorhandene DLL's zu sehen (siehe Bild). Was das bedeutet ist mir unklar. Zu meiner Anwendung gehören 3 eigene DLL's, welche im Verbund mit der Anwendung compiliert und gelinkt werden. Ich arbeite auf Windows 10 Pro x64 mit Visual C++ 2010 Prof.

    Gruß
       Klaus.


    M. Thaddaeus

    Dienstag, 15. November 2016 13:56
  • Übrigens, da Deine Anwendung 64 Bit ist, mußt Du die 64 Bit Version der VC++2010 Redistributable installieren. Es gibt da zwei Versionen die für x86 und die für x64. Einfacherweise installiert man auf 64 Bit Maschninen gleich beide die 32 Bit und die 64 Bit.

    Seine Anwendung ist nicht x64, sonst würde dort auch 64 dran stehen. Hier liegt etwas vor, in dem x64 Code in einer x86 Anwendung verwendet wird.

    - Florian

    Dienstag, 15. November 2016 15:16
  • Allerdings waren an einigen Stellen noch Hinweise auf nicht vorhandene DLL's zu sehen (siehe Bild). Was das bedeutet ist mir unklar. Zu meiner Anwendung gehören 3 eigene DLL's, welche im Verbund mit der Anwendung compiliert und gelinkt werden.

    Diese API*.DLL Fehler solltest Du vergessen können. Ich bin mir jetzt nicht 100% sicher ich meine das ist irgendein Urschleim der UCRT...

    Hier hat jemand etwas mehr darüber geschrieben:

    https://ofekshilon.com/2016/03/27/on-api-ms-win-xxxxx-dll-and-other-dependency-walker-glitches/

    Trotz dieser Dependency Walker Fehler sollte Deine Anwendung eigentlich laufen. Bei mir ist es auch so, diese API*.DLL "Fehler" kenne ich auch.


    Best regards

    Bordon

    Note: Posted code pieces may not have a good programming style and may not perfect. It is also possible that they do not work in all situations. Code pieces are only indended to explain something particualar.

    Mittwoch, 16. November 2016 05:38
  • Hallo Bordon,

    ich frage mich warum Du das offensichtliche ignorierst.

    Diese API*.DLL Fehler solltest Du vergessen können.

    Die kann er sicher nicht vergessen - Wir erinnern uns, die Anwendung läuft nicht.

    Ich bin mir jetzt nicht 100% sicher ich meine das ist irgendein Urschleim der UCRT...

    Das ist sicher kein UCRT Problem, wir sprechen nicht von VS2015.

    Es ist doch im Bild deutlich zu sehen, auch wenn der m-thaddaeus uns es Eingangs vorenthalten hat, seine 32bit Anwendung hängt von 64bit DLLs ab. Der Grund warum diese nicht gefunden werden ist vermutlich der Natur, dass der Suchpfad für DLLs sich für x86 von dem für x64 unterscheidet. Ob der Dependency Walker das richtig darzustellen weiß, kann ich nicht sagen, dies wird wohl davon abhängen wie die dazugehörigen Informationen aus der Exe geholt werden - letztlich gehe ich aber davon aus, das der entsprechende Code nicht in der Exe enthalten ist (bzw. nur Entwicklungsumgebungsspezifisch) und die nötigen Suchpfad Informationen allein deshalb schon nicht vom Dependency Walker ermittelt werden können.

    Was mir an dieser Sache nicht klar ist, warum hier 32/64 bit gemischt wurde und warum dem Entwickler nicht klar ist was er da getan hat - kann mir nicht Vorstellen das es einfach so nebenbei passiert ist und es vergessen wurde.

    m-thaddaeus, eventuell löst es dein Problem, wenn Du alles konsequent x64 kompilierst. Vermutlich ist es aber besser Du sprichst mit dem, der diese x64 Stellen eingebaut hat.


    - Florian

    Mittwoch, 16. November 2016 08:13
  • ich frage mich warum Du das offensichtliche ignorierst.

    Weil das nicht das Problem ist. Im Screenshot, wo die MFC100.dll nicht enthalten ist, siehst Du ausschließlich Windows System DLLs, ergo läd die Anwendung nur diese DLLs. Wenn eine dieser System DLLs der Meinung wäre irgendeine nicht existente API*.DLL zu verwenden ist das nicht ein Fehler der Anwendung, sondern ein Fehler in der OS Installation, durch was auch immer.

    Das ist sicher kein UCRT Problem, wir sprechen nicht von VS2015.

    Ja die anwendung zieht ja auch keine UCRT an, sonst würdest Du das in der ersten Ebene des Dependency Trees sehen. Das ist ein reines Dependency Walker "Problem".

    Und die API-*.DLLs gehören sehr wohl zur UCRT:

    https://support.microsoft.com/de-de/kb/2999226

    Nur wenn Du zur UCRT linken tust dann hast Du im Dependency Tree die UCRTBASE.DLL mit drin stehen.


    Best regards

    Bordon

    Note: Posted code pieces may not have a good programming style and may not perfect. It is also possible that they do not work in all situations. Code pieces are only indended to explain something particualar.

    Mittwoch, 16. November 2016 10:14
  • ich frage mich warum Du das offensichtliche ignorierst.

    Weil das nicht das Problem ist.

    Im Screenshot, wo die MFC100.dll nicht enthalten ist, siehst Du ausschließlich Windows System DLLs,

    x64 DLLs! Auch die MFC100.dll wurde vorab als x64 Version nicht gefunden! Ich weiß, ich wiederhole mich, aber eine Win32 Anwendung (siehe Compiler Einstellungen und Dependency Walker Anzeige) verwendet normalerweise keine x64 DLLs.

    Du willst nicht ernsthaft annehmen, dass die dort aufgelisteten DLLs auf dem System nicht vorhanden sind, oder?

    Mir wäre es neu das der Dependency Walker Einfluss auf die Lauffähigkeit anderer Programme hat.


    - Florian

    Mittwoch, 16. November 2016 10:37
  • Hallo Bordon, hallo Florian,

    da habe ich ja was schönes angerichtet, aber bevor Ihr Euch in die Haare kriegt, bitte ich Euch das Ergebnis meiner Versuche mit fremden Rechnern abzuwarten. Ich werde mich - hoffentlich abschließend - wieder melden. Dank Euch beiden.

    Gruß
       Klaus.


    M. Thaddaeus

    Mittwoch, 16. November 2016 11:12
  • x64 DLLs! Auch die MFC100.dll wurde vorab als x64 Version nicht gefunden! Ich weiß, ich wiederhole mich, aber eine Win32 Anwendung (siehe Compiler Einstellungen und Dependency Walker Anzeige) verwendet normalerweise keine x64 DLLs.

    Nun ich habe ja auch keine Zweifel dass es ein x86 Programm ist. Ich hatte übersehen, dass das EXE Icon kein 64Bit hatte. Das war mein Fehler.

    Übrigens das hier ist eine X86 Anwendung, die mit VC2008 gebaut wurde. Da sucht Dependenywalker auch nach UCRT. Wieso er das macht keine Ahnung, ist aber kein Problem. Die Anwendung funktioniert absolut problemlos, auf verschiedenen Plattformen (XP-Win10).

    Du willst nicht ernsthaft annehmen, dass die dort aufgelisteten DLLs auf dem System nicht vorhanden sind, oder?

    Nun Dependency Walker sagt halt bestimmte api-*.dll Dateien fehlen. Wieso er das macht keine Ahnung. Meine Anwendung verwenden keine UCRT, weil VC2008, trotz dem sucht Depencencywalker diese. Das ist halt schlicht und einfach ein False Positive. Nicht mehr nicht weniger habe ich ausgesagt. api-*.dll Dateien gehören zu UCRT das ist ein Fakt, den auch Du nicht wegdiskutieren kannst. Warum DependencyWalker die sucht keine Ahnung.

    Übrigens irgendwann in den frühen 2000er Jahren ist der Dependencywaker aus Qualitätsgründen aus dem Plattform SDK (heute windows SDK) rausgeflogen. Vielelicht ist das einer der Gründe, die False Positives...

    Wenn die Anwendung von Klaus die statisch gelinkt wurde nicht korrekt funktioniert, hat das andere Gründe und liegt nicht an "fehlenden" api-*.dll's!

    @Klaus: Du kein Problem, ich bekomme mich nicht in die Wolle. :-) Was schmeisst denn Deine Anwendung die ohne die MFC100.DLL aukommt für einen Fehler beim Start?


    Best regards

    Bordon

    Note: Posted code pieces may not have a good programming style and may not perfect. It is also possible that they do not work in all situations. Code pieces are only indended to explain something particualar.

    Mittwoch, 16. November 2016 13:08
  • Ich habe hier auch noch VC2008 Output liegen, mir zeigt der Dependency Walker nicht eine 64bit DLL an, die er dort vermissen würde - allerdings habe ich auch die x86 Version verwendet, bestimmt verhält es sich bei x64 Version anders, da diese für x86 Anwendungen auch ungeeignet ist. Insofern hätte ich vielleicht vorab fragen müssen ob auch die korrekte Version des Dependency Walker verwendet wurde - statt davon auszugehen, dass dem so ist -, falls dem nicht so ist, dann ist das zuvor geschriebene hinfällig, bzw. nur insofern relevant, doch bitte die geeignete Version des Dependency Walkers zu verwenden.

    - Florian

    Mittwoch, 16. November 2016 13:38
  • ..., bzw. nur insofern relevant, doch bitte die geeignete Version des Dependency Walkers zu verwenden.

    Das ist total Banane, hier das ganze mit der x86 Version. Der einzige unterschied ist, dass die DLL Icons eben nicht rot sind mit 64 (übrigens eine 64 Bit Anwendung hätte die Icon in Weiß mit dem Marking 64). Der Dependency Walker durchsucht nur den PE Header mit allem drum und Dran für die Abhängigkeiten in dem Treeview.

    ..und ich verwende eine recht neue Version vom Dependency Walker, mag sogar sein es gibt noch neuere!?


    Best regards

    Bordon

    Note: Posted code pieces may not have a good programming style and may not perfect. It is also possible that they do not work in all situations. Code pieces are only indended to explain something particualar.

    Mittwoch, 16. November 2016 14:17
  • Ja, das ist Banane...
    Und richtig, an der Anwendung stände bei x64, die 64 dran, unabhängig davon ob Dependency Walker x86 oder x64 verwendet würde. Im Bezug auf eine x86 Anwendung: In der x86 Version würden die roten mit der 64 dran bedeuten, dass die x64 DLLs benötigt würden und nicht gefunden werden, in der x64 bedeutet es schlicht gar nix - und ist pauschal rot?- Ich schätze es liegt hier der x64 Dependency Walker Fall vor.

    Gut das wir das klären konnten.

    Weiß nicht von wann die Neueste ist, hab hier altes (2006 - hab schon lange keine DLL mehr vermisst) rumliegen - wird wohl auch nicht viel besser werden.


    - Florian

    Mittwoch, 16. November 2016 14:37
  • Guten Morgen Florian, guten Morgen Burdon,

    zu Eurer Diskussion den Dependency Walker betreffend könnt Ihr hier etwas nachlesen:

    https://ofekshilon.com/2016/03/27/on-api-ms-win-xxxxx-dll-and-other-dependency-walker-glitches/

    Zur Ergänzung habe ich nochmals meine Anwendung mit allen 3 beteiligten DLL's mit dem Dependency Walker - in diesem Falle x86 - auf meinem x64 Rechner untersucht. Hier die Ausdrucke.

    Ich melde mich wieder, wenn ich meine Untersuchungen auf mindestens 3 "jungfräulichen" Rechnern abgeschlossen habe.

    Gruß
       Klaus.


    M. Thaddaeus

    Donnerstag, 17. November 2016 09:26
  • Hallo Klaus,

    den von Dir geposteten Link hatte ich auch schon gepostet, was nichts gebracht hatte... ;-)

    Nun aber zu Deinem Screenshot. Deine Anwendung wurde so wie es aussiehtr mit der statischen Version der MFC gelinkt. Anders sieht es aus bei zwei der 3 DLLs. Die beiden DLLs die im Screenshot blau hinterlegt sind im Namen sind so wie es aussieht nicht mit der statischen Version der MFC gelinkt. Beide DLLs haben eine Anhängigkeit zur MFC100.DLL, MSVCR100.DLL und MSVCP100.DLL. Da bekommst Du dann die Fehlermeldung das die DLLs fehlen, wenn die Redist fehlt.

    Das Du das Problem bekommst obwohl Du die VC Redist installierst ist eine andere Geschichte.


    Best regards

    Bordon

    Note: Posted code pieces may not have a good programming style and may not perfect. It is also possible that they do not work in all situations. Code pieces are only indended to explain something particualar.

    Montag, 21. November 2016 06:21
  • Guten Abend Bordon,

    leider war mir unbekannt, daß die Einstellungen der einzelnen Projekte unterschiedlich im Debug und Release sein können. Ich habe das bei den beiden DLL's natürlich korrigiert und bin nun gespannt auf das Ergebnis meines Tests auf "jungfräulichen" Rechnern. Diese Test können erst Ende dieser Woche stattfinden. Ich werde Euch das Ergebnis mitteilen.

    In jedem Fall habe ich mal wieder was gelernt! Man kann so alt werden wie Methusalem - und ich bin schon ziemlich alt (!), aber man lernt nie aus. Jedenfalls bin ich Dir für Deine Aufmerksamkeit sehr dankbar. Ich hätte das ja auch sehen können, und das Ärgert mich doch etwas.

    Gruß
       Klaus.


    M. Thaddaeus

    • Als Antwort markiert m-thaddaeus Mittwoch, 30. November 2016 05:37
    Montag, 21. November 2016 16:15
  • Guten Morgen miteinander,

    danke für viel Geduld und Hilfe! Es ist geschafft!!! Meine Anwendung läuft auf diversen Rechnern mit unterschiedlichen Windows Systemen von Vista bis Win 10, x32 oder x64 einwandfrei.

    Herzlichen Dank,

       Klaus.


    M. Thaddaeus

    • Als Antwort markiert m-thaddaeus Mittwoch, 30. November 2016 05:41
    Mittwoch, 30. November 2016 05:41