Ich entwickle einige Windows-Software, die manchmal in eingebetteten Szenarien verwendet wird. Das ist nicht ungewöhnlich für meine Benutzer, einen dedizierten Win7 oder Win8 PC zu haben, den sie nie aktualisieren, nicht sogar eine Verbindung zum Internet. Benutzer schließen diesen PC an eine bestimmte industrielle Hardware an und verwenden dieses System nur für einen Job.Statische Verbindung mit Microsoft CRT und OpenMP
Meine Software enthält Komponenten, die ich in Visual C++ geschrieben habe. Ich schließe CRT in meine MSI-Pakete mit geeigneten Installer Merge-Modulen ein.
Leider, für einen PC, der nie aktualisiert, das funktioniert nicht: Heute habe ich einen Fehlerbericht, die App stürzt beim Start sagt "kann nicht gestartet werden, weil api-ms-win-crt-stdio-l1- 1-0.dll fehlt auf Ihrem Computer "
This answer schlägt statische Verbindung zu CRT vor.
Hat das getan. Aber einige Teile meines C++ Codes verlassen sich auf OpenMP für Parallelität.
Dependency walker zeigt mir die DLL, die ich aufbaue, hängt von vcomp140.dll selbst wenn mit Multi-threaded (/MT)
Laufzeitbibliothek Einstellungen kompiliert.
Auch zeigt es vcomp140.dll hängt nur von kernel32.dll und user32.dll.
Kann ich einfach diese einzelne DLL, vcomp140.dll, im Installationsordner ablegen? Funktioniert es auf offline Windows 7 PC?
Statisch Verknüpfung gegen die CRT häufig vorgeschlagen, aber nicht unbedingt die beste Idee (siehe [Mögliche Fehler beim Überschreiten von CRT-Objekten über DLL-Grenzen hinweg] (https://msdn.microsoft.com/en-us/library/ms235460.aspx)). Eine bessere Lösung ist die Bereitstellung Ihrer Abhängigkeiten (CRT und andere) neben Ihrer Anwendung. Erwarten Sie nicht, eine bestimmte DLL einer bestimmten Version auf einem bestimmten Clientcomputer zu finden. – IInspectable
Ich übergebe nur COM-Schnittstellen über DLL-Grenzen, so dass dies kein Problem ist. Abhängigkeiten von nie aktualisierten Windows 7 können nicht bereitgestellt werden, da für die moderne CRT das KB2999226-Windows-Update erforderlich ist. – Soonts
Wenn KB2999226 das einzige Problem ist, habe ich Software gesehen, die mit einem oder mehreren Windows-Updates ausgeliefert wird. Nicht sicher, ob Sie eine spezielle Lizenz benötigen, um das zu tun oder nicht. Alternativ kenne ich OpenMP nicht sehr gut, aber ich gehe davon aus, dass es offen ist. Können Sie es direkt in Ihre Anwendung übersetzen? Kombiniert mit einer statischen Laufzeit könnte dies das Problem beheben. –