C++-Laufzeitbibliotheken aktualisieren

Re: C++-Laufzeitbibliotheken aktualisieren

Postby Denniss » 21.06.2011, 17:35

Schon eine Verbesserung. Leider gibt es noch ein paar Probleme:
In einer 7-x64 VM wurden beide 2005er und 2010er Versionen erneuert, von c++ 2008 aber keine der beiden.
Hängt vielleicht hiermit zusammen:
http://mdb-blog.blogspot.com/2010/11/bo ... edist.html
Denniss
 
Posts: 869
Joined: 01.08.2009, 10:51

Re: C++-Laufzeitbibliotheken aktualisieren

Postby WSUSUpdateAdmin » 21.06.2011, 21:49

Denniss wrote:Schon eine Verbesserung.

Das hatte ich gehofft, danke. :|

Denniss wrote:Leider gibt es noch ein paar Probleme:
In einer 7-x64 VM wurden beide 2005er und 2010er Versionen erneuert, von c++ 2008 aber keine der beiden.
Hängt vielleicht hiermit zusammen:
http://mdb-blog.blogspot.com/2010/11/bo ... edist.html

Wenn Du es schon auf die Sprachversion zurückführst: Welche war denn bei Deinem Test installiert?
Das scheint ein Alptraum zu werden mit C++; ich bin kurz davor, das komplett wieder herauszunehmen...
WSUSUpdateAdmin
Administrator
 
Posts: 2245
Joined: 07.07.2009, 14:38

Re: C++-Laufzeitbibliotheken aktualisieren

Postby Denniss » 22.06.2011, 00:33

Eine Frage zur Funktionsweise des c++ checks:
Prüft der ob die aktuelleste Version installiert ist und überspringt dann diese oder prüft der auf vorhandene alte Versionen und setzt dann den Marker für die installation ?

Hast Du noch die April-Versionen von 2005?
Falls ja, werden die als veraltete Versionen erkannt und aktualisiert?
-> beim 2010 klappt das ja, die vorhandene April-Version wurde durch die aktuelle ersetzt.

Wenn M$ beim 2008 unterschiedliche Codes bei den verschiedenen Sprachen anwendet, bleibt dort wohl nur das Zurückkehren zur Holzhammermethode - immer aktualisieren wenn die Option im Installer angehakt ist.

EDIT: Das könnte helfen, die Produktcodes der aktuellen Versionen herauszufinden:
http://www.gamedev.net/topic/548080-gui ... ibutables/
In der registry von meinem Win7-x64 Prof:
2008 x64: 5FCE6D76-F5DC-37AB-B2B8-22AB8CEDB1D4
2008 x86: 9BE518E6-ECC6-35A9-88E4-87755C07200F
-> Bei beiden würde ich mal von der englischen Version ausgehen.

EDIT2: meine Test-Win7 in der VM (Ultimate, englisch, deutsche MUI) weist die identischen Einträge bei den 2008er Versionen auf.

Just for the records - sowohl beim normales Win7x64 als auch das VM-7 weisen folgende Strings auf:
2005 x86: 710f4c1c-cc18-4c49-8cbf-51240c89a1a2
2005 x64: ad8a2fa1-06e7-4b0d-927d-6e54b3d31028

2010 x86: F0C3E5D1-1ADE-321E-8167-68EF0DE699A5
2010 x64: 1D8E6291-B0D5-35EC-8441-6616F567A0F7

Die x86-Strings kann ich so auch für WinXP 32Bit bestätigen.

EDIT3: Alle Strings sind so auch bei w2k3-x64 vorhanden.
Denniss
 
Posts: 869
Joined: 01.08.2009, 10:51

Re: C++-Laufzeitbibliotheken aktualisieren

Postby rednaxela » 22.06.2011, 05:59

WSUSUpdateAdmin wrote::arrow: http://trac.wsusoffline.net/trac.fcgi/browser/trunk (r259).
GTW

Das sieht doch sehr vielversprechend aus :) Die 64bit-Versionen wurden zusätzlich geladen und mit dem gestern neu erschienenen Updatekatalog vcredist2010 komplett neu geladen. Auf meinem RR (realen Rechner) mit XP wurde diese (und NUR diese) installiert, und das nur einmal, ein weiterer Durchlauf installierte nichts mehr. Danke für die Verbesserung :)
Die Mehrheit der Mitglieder dieses Forums hat sich dafür ausgesprochen höflich und respektvoll miteinander umzugehen. Neue Mitglieder werden gebeten diese Entscheidung zu respektieren und sich ebenfalls so zu verhalten ;)
Bin ab und zu mal hier...
rednaxela
 
Posts: 164
Joined: 15.09.2010, 09:22
Location: Niedersachsen

Re: C++-Laufzeitbibliotheken aktualisieren

Postby Denniss » 22.06.2011, 16:14

Produktcode nicht erkannter C++ 2008 Versionen:
x86
09298F26-A95C-31E2-9D95-2C60F586F075 -> 9.0.21022
6AFCA4E1-9B78-3640-8F72-A7BF33448200 -> 9.0.30729

x64
6F29F195-B11C-3EAD-B883-997BB29DFA17 -> 9.0.21022
D285FC5F-3021-32E9-9C59-24CA325BDC5C -> 9.0.30729

Nach dem Hinzufügen der Productcodes in DetermineSystemProperties.vbs werden diese auch aktualisiert. Dafür aber erfolgt die Aktualisierung bei jedem Duchlauf erneut, ebenso bei 2005 x64 da dort seltsamerweise nicht die alte Version deinstalliert wurde (beim 2005 x86 schon ?!?).

Folgende Verbesserungsvorschläge:
1) Überprüfung auf alte und aktuelle Version, alte Version vorhanden = Install, alte und aktuelle Version vorhanden = keine Install
2) Überprüfung nur auf aktuelle Version, Install wenn nicht vorhanden.

Wenn machbar, würde ich Version 2 für sinnvoller halten.
Denniss
 
Posts: 869
Joined: 01.08.2009, 10:51

Re: C++-Laufzeitbibliotheken aktualisieren

Postby WSUSUpdateAdmin » 22.06.2011, 17:12

Denniss wrote:Eine Frage zur Funktionsweise des c++ checks:
Prüft der ob die aktuelleste Version installiert ist und überspringt dann diese oder prüft der auf vorhandene alte Versionen und setzt dann den Marker für die installation ?

Letzteres - bis jetzt. Ich werde das aber ändern/verbessern (müssen), allein wg. 2008...

Denniss wrote:[...]Folgende Verbesserungsvorschläge:
1) Überprüfung auf alte und aktuelle Version, alte Version vorhanden = Install, alte und aktuelle Version vorhanden = keine Install
2) Überprüfung nur auf aktuelle Version, Install wenn nicht vorhanden.
Wenn machbar, würde ich Version 2 für sinnvoller halten.

2) ist genau das, was Ihr vorher nicht wolltet - einfach losbrezeln, wenn die aktuelle Version nicht vorhanden ist... :?:
1) kommt den bisher geäußerten Anforderungen wohl am nächsten.

Ich werde das auch einbauen, aber nicht mehr heute- immerhin muss man von vierzig Sprach-/Architekturversionen die Installations-Produktcodes ermitteln, weil so etwas

Image

bei Microsoft kein Problem ist; es geht auf Wunsch auch noch weitaus üppiger. :evil:
Attachments
cpp2008_versions.png
(22.92 KiB) Not downloaded yet
WSUSUpdateAdmin
Administrator
 
Posts: 2245
Joined: 07.07.2009, 14:38

Re: C++-Laufzeitbibliotheken aktualisieren

Postby Denniss » 22.06.2011, 17:23

Also mit dem einfach losbrezeln hätte ich kein Problem. Schließlich hat man die Option zur Installation der C++ Bibliotheken im Installer angewählt bzw nicht abgewählt.
Denniss
 
Posts: 869
Joined: 01.08.2009, 10:51

Re: C++-Laufzeitbibliotheken aktualisieren

Postby boco » 23.06.2011, 00:08

Ich würde bevorzugen, die jeweilige C++ Runtime nur dann zu installieren/aktualisieren wenn sie auf dem System in irgendeiner Form vorhanden ist. Das bedeutet, VC++ 2010 wird nicht installiert wenn es auf dem Zielsystem nicht schon installiert war.

1. Aktuelle Version auf dem Zielsystem installiert - Installation überspringen (wäre redundant).
2. Ältere Version vorhanden - Installieren.
3. Gar keine Version vorhanden - keine Installation, es wäre dumm VC++ DLLs zu installieren wenn diese nicht gebraucht werden. Die sichersten DLLs sind nun mal die nicht existenten.
Microsoft update catalog: http://catalog.update.microsoft.com/v7/site/
Windows Install media download: https://support.microsoft.com/en-us/help/15088/windows-create-installation-media
boco
 
Posts: 2391
Joined: 24.11.2009, 17:00
Location: Germany

Re: C++-Laufzeitbibliotheken aktualisieren

Postby Denniss » 23.06.2011, 01:36

Code: Select all
  ' Documentation: http://blogs.msdn.com/b/astebner/archive/2007/01/16/mailbag-how-to-detect-the-presence-of-the-vc-8-0-runtime-redistributable-package.aspx
  If ( (UCase(strProduct) = "{A49F249F-0C91-497F-86DF-B2585E8E76B7}") _
    Or (UCase(strProduct) = "{7299052B-02A4-4627-81F2-1818DA5D550D}") _
    Or (UCase(strProduct) = "{837B34E3-7C30-493C-8F6A-2B0F04E2912C}") ) Then
    objCmdFile.WriteLine("set CPP_2005_x86=1")
  End If
  If (UCase(strProduct) = "{710f4c1c-cc18-4c49-8cbf-51240c89a1a2}")  Then
    objCmdFile.WriteLine("set CPP_2005_x86=0")
  End If
  If ( (UCase(strProduct) = "{6E8E85E8-CE4B-4FF5-91F7-04999C9FAE6A}") _
    Or (UCase(strProduct) = "{071C9B48-7C32-4621-A0AC-3F809523288F}") _
    Or (UCase(strProduct) = "{6CE5BAE9-D3CA-4B99-891A-1DC6C118A5FC}") ) Then
    objCmdFile.WriteLine("set CPP_2005_x64=1")
  End If
  If  (UCase(strProduct) = "{ad8a2fa1-06e7-4b0d-927d-6e54b3d31028}") Then
    objCmdFile.WriteLine("set CPP_2005_x64=0")
  End If
  ' Documentation: http://blogs.msdn.com/b/astebner/archive/2009/01/29/9384143.aspx
  If ( (UCase(strProduct) = "{FF66E9F6-83E7-3A3E-AF14-8DE9A809A6A4}") _
    Or (UCase(strProduct) = "{9A25302D-30C0-39D9-BD6F-21E6EC160475}") _
    Or (UCase(strProduct) = "{1F1C2DFC-2D24-3E06-BCB8-725134ADF989}") _
    Or (UCase(strProduct) = "{6AFCA4E1-9B78-3640-8F72-A7BF33448200}") _
    Or (UCase(strProduct) = "{09298F26-A95C-31E2-9D95-2C60F586F075}") ) Then
    objCmdFile.WriteLine("set CPP_2008_x86=1")
  End If
  If (UCase(strProduct) = "{9BE518E6-ECC6-35A9-88E4-87755C07200F}") Then
    objCmdFile.WriteLine("set CPP_2008_x86=0")
  End If
  If ( (UCase(strProduct) = "{350AA351-21FA-3270-8B7A-835434E766AD}") _
    Or (UCase(strProduct) = "{8220EEFE-38CD-377E-8595-13398D740ACE}") _
    Or (UCase(strProduct) = "{4B6C7001-C7D6-3710-913E-5BC23FCE91E6}") _
    Or (UCase(strProduct) = "{D285FC5F-3021-32E9-9C59-24CA325BDC5C}") _
    Or (UCase(strProduct) = "{6F29F195-B11C-3EAD-B883-997BB29DFA17}") ) Then
    objCmdFile.WriteLine("set CPP_2008_x64=1")
  End If
  If  (UCase(strProduct) = "{5FCE6D76-F5DC-37AB-B2B8-22AB8CEDB1D4}") Then
    objCmdFile.WriteLine("set CPP_2008_x64=0")
  End If
  ' Documentation: http://blogs.msdn.com/b/astebner/archive/2010/05/05/10008146.aspx
  If (UCase(strProduct) = "{196BB40D-1578-3D01-B289-BEFC77A11A1E}") Then
    objCmdFile.WriteLine("set CPP_2010_x86=1")
  End If
  If  (UCase(strProduct) = "{F0C3E5D1-1ADE-321E-8167-68EF0DE699A5}") Then
    objCmdFile.WriteLine("set CPP_2010_x86=0")
  End If
  If (UCase(strProduct) = "{DA5E371C-6333-3D8A-93A4-6FD5B20BCC6E}") Then
    objCmdFile.WriteLine("set CPP_2010_x64=1")
  End If
  If  (UCase(strProduct) = "{1D8E6291-B0D5-35EC-8441-6616F567A0F7}") Then
    objCmdFile.WriteLine("set CPP_2010_x64=0")
  End If
Diese Modifikation in der DetermineSystemProperties.vbs nutze ich momentan um bei vorhandenen aktuellen Versionen eine erneute Installation zu verhindern. Aus einem für mich (und meinen eher rudimentären Skriptfähigkeiten) nicht verständlichem Grund funktioniert das nicht bei den 2005er Versionen (die ersetzte alte x86-Version wieder aufgespielt, x64 wurde nicht ersetzt sondern nebenher installiert). Bei den 2008er Versionen klappt dies.
Denniss
 
Posts: 869
Joined: 01.08.2009, 10:51

Re: C++-Laufzeitbibliotheken aktualisieren

Postby WSUSUpdateAdmin » 23.06.2011, 09:57

Moin!

@boco: Sehe ich genauso. Ich baue das gerade um.
@Denniss: Mit dem Code gibt's zwei Probleme:
a) "{710f4c1c-cc18-4c49-8cbf-51240c89a1a2}" und "{ad8a2fa1-06e7-4b0d-927d-6e54b3d31028}" sind nicht UCase
b) Da das ganze in einer Schleife durchlaufen wird, ist nicht klar, ob in der .cmd-Datei zuletzt "set CPP_2005_x86=1" oder "set CPP_2005_x86=0" (x64 und 2008 analog) steht, und der letzte Eintrag gewinnt.

Gruß
Torsten
WSUSUpdateAdmin
Administrator
 
Posts: 2245
Joined: 07.07.2009, 14:38

PreviousNext

Return to Anregungen / Suggestions

Who is online

Users browsing this forum: No registered users and 45 guests