2017-10-03 1 views
0

Wenn Sie eine Software mit Visual Studio 2015 vertreiben, wird dem Benutzer ein verwirrendes Dialogfeld angezeigt, das anzeigt, dass mit der Software etwas nicht stimmt .Programmgesteuert ermitteln, ob zukünftige Versionen von Visual Studio-Laufzeit installiert werden

Um dies zu vermeiden, muss der Entwickler bei der Bereitstellung von Software mit der Laufzeit 2015 zuerst nach neueren Versionen der Visual Studio-Laufzeit suchen, indem er die Registrierung abfragt, und den Installationsversuch vermeiden, wenn eine neuere Version gefunden wird .

Zum Beispiel sind hier einige Kontrollen auf einem 64-Bit-System für Visual Studio 2015/2017:

//Check for VS2015 on x86 architecture 
if(installer.value("HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\ 
      VisualStudio\\14.0\\VC\\Runtimes\\x86\\Installed") == 1) 
{ 
    doInstall = false; 
} 
//Check for VS2017 on x86 architecture 
if(installer.value("HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\ 
      VisualStudio\\15.0\\VC\\Runtimes\\x86\\Installed") == 1) 
{ 
    doInstall = false; 
} 

if(doInstall===true) 
{ //Install } 

(geschrieben in Qt für installscript.qs)

Sie die Überprüfung angezeigt unterscheidet sich nur durch die Versionsnummer, und dies gilt derzeit für alle vorhandenen Visual Studio-Laufzeiten. Ich kann jede vorhandene Version von Visual Studio abfragen und bestätigen, dass diese Installation vorhanden ist, indem ich einfach die Versionsnummer ändere.

Für jetzt, es ist ein einfacher Fall der Überprüfung, ob 2015 oder 2017 existieren, und reagieren entsprechend.

Das Problem: Nachdem ich meine Software veröffentlicht habe, wird es sicherlich spätere Versionen von Visual Studio geben, für die ich gerade nicht teste. Ich muss meine Version zukunftssicher machen, so dass mein Installer nicht versucht, das verteilbare Visual Studio 2015 zu installieren, wenn bereits ein hypothetisches Visual Studio 2020 vorhanden ist.

Im Moment glaube ich, dass die einzige Lösung darin besteht, eine ganze Reihe von Tests für diese hypothetischen Visual Studio-Versionen hinzuzufügen, die Namenskonvention einzuhalten und zu einer großen Zahl zu gehen, die die geplante Programmlebensdauer abdeckt.

Dies sieht aus wie ein Fehler Y2kbug Typ. Es fühlt sich an, als sollte es einen besseren Weg geben. Ich kann nicht scheinen, irgendwelche Plakate zu finden, die sogar dieses Problem, geschweige denn Lösungen dafür betrachten, so vermute ich, dass es eine allgemein bekannte, offensichtliche Lösung geben muss, die ich nur vermisse.

Meine beste Vermutung ist, dass es möglicherweise einen gemeinsamen Registrierungsschlüssel gibt, der einfach angibt, ob 'irgendein' Visual Studio-Produkt installiert ist, aber ich muss noch eines finden.

+2

Diese Installationsprogramme wurden für Endbenutzer entwickelt, um Probleme zu vermeiden, wenn ein Programmierer vergisst, die Laufzeitdlls einzuschließen, oder ein wackeliges Installationsprogramm die benötigten Dateien überschreibt. Wenn Sie ein eigenes Installationsprogramm erstellen, verwenden Sie immer die Zusammenführungsdateien oder bevorzugen Sie die lokale Bereitstellung. Ziehen Sie immer zuerst die lokale Bereitstellung vor. –

Antwort

1

Ich würde persönlich regexp die Version aus dem Pfad VisualStudio\\**15.0**\\ analysieren und dann testen, ob myRequiredVersion> ParsedVersion. Es besteht immer die Möglichkeit, dass MS (oder irgendein Unternehmen) mit Benennungskonventionen verrückt spielt und den gesamten Weg in der Zukunft ändert, aber das ist das Risiko bei allem wirklich. Sie sollten den Benutzer trotzdem fragen, ob er weiß, dass es (neuere) Runtime/Redistributable gibt und die Installation zulässt, auch wenn Sie keine passende Übereinstimmung finden.

+0

Ich denke, das Hauptrisiko bei diesem Ansatz besteht darin, dass es zukünftige Versionen von Visual Studio Runtime geben könnte, die * die Laufzeit, die Sie benötigen, nicht ersetzen. Ich denke, Hans 'Kommentar ist auf der Nase. Sicherlich muss es eine Dokumentation geben, die beschreibt, wie man die Laufzeit in Ihrem Installer richtig einbaut! –

Verwandte Themen