Version in lesbares Format konvertieren

Magic1416

Lieutenant
Registriert
Dez. 2003
Beiträge
533
Hallo Zusammen.

In einer Datenbank sind Informationen zu Files hinterlegt, die ich abfragen möchte. Unteranderem möchte ich die Version des Selectierten Files abfragen. In der Datenbank sind die Versionierungsinformation als Int(4) für die Major Version und Minor Version hinterlegt.

z.b.
File: comctl332.oxc (string)
MajorVersion: 393223 (int4)
MinorVersion: 8862 (int4)

ich möchte eine Funktion schreiben. Die mir diese Beiden Integer in einen String und zwar im Format #.#.#.# umwandelt. So, dass ich mit der Versionsnummer halt was anfangen kann. Ich möchte das in C# schreiben. Grundsätzlich brauch ich jedoch nur, wie das umgerechnet wird.

Für Eure Hilfe wäre ich sehr dankbar

MFG
Magic
 
Grundsätzlich brauch ich jedoch nur, wie das umgerechnet wird.

den algorithmus erfaerhst du aber nur von demjenigen, der diese werte erstellt hat.
 
HoRnominatoR schrieb:
den algorithmus erfaerhst du aber nur von demjenigen, der diese werte erstellt hat.

Nein, das ist definitiv eine allgemeine Form.
Wenn Du die Major Version in Hex umwandelst erhälst Du die Zahl 60007.
Wenn Du die Major Version durch 65536 teilst erhältst du 6 Rest 7.
6 Ist wirklich die Major Version der Datei. Mit dem Rest muß ich irgendwie weiter rechnen. Uns so ergibt sich dann ein Algorythmus.
Mit der 7 weiss ich allerdings noch nichts anzufangen.

Gruß Magic
 
wie "allgemein"? wenn es das schon irgendwo gibt, dann les dort nach wie das gemacht wurde. aber einen "algorithmus fuer alles" gibt es nicht. wo hast du das denn her? sicher nicht durch ausprobieren. gib uns doch mal mehr informationen als den quell- und ziel-string.
 
So, nach langem Suchen hab ich jetzt die Lösung für mein Problem. Hab ein VB Script geschrieben um Euch das mit der Integer Version zu zeigen, falls jemand mal das selbe Problem haben sollte. Hierzu nutze ich das Windows Installer Objekt und prüfe, was auf dem Rechner installiert ist. Anschließend wird die Version der Software ausgegeben. Einmal in der Integer Version, wie es das Objekt ausgibt, und einmal umgewandelt.

Code:
Option Explicit


Function check_installed_guid()
Dim Registry
Dim RKeys, RegValue
const HKLM	= &H80000002
	
	Set Registry = Nothing : Set Registry = GetObject("winmgmts:!root/default:StdRegProv")	
	
		err.Clear
	    	Registry.EnumKey HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData\S-1-5-18\Products", RKeys
	    	If err.number<> 0 then
	    		wscript.echo "cant enum key = " & err.description
	    	Else
		    	For each RegValue in RKeys
		    		Get_Version_from_installed_Msi(RegValue)
				next
			End if
		Set Registry = Nothing
		
End Function


Function Get_Version_from_installed_Msi(guids)
	On Error Resume next
	Dim guid,installer,versioninstalled,versioninstalled1
		
	guid = UnPackGUID(guids)
	MsgBox "Aktuell Installierte Guid: " & guid
		
	set Installer = Nothing : set Installer = WScript.CreateObject("WindowsInstaller.Installer")

	versioninstalled = installer.productInfo(guid, "Version")
	MsgBox "MSI Version Installed: """ & versioninstalled& """. Das ist die Version, die das Installer Objekt auswirft"
	versioninstalled1 = (versioninstalled\65536\256) & "." & _
	(versioninstalled\65535 Mod 256) & "." & _
	(versioninstalled Mod 65536)
	MsgBox "Real Version: " & versioninstalled1
	Err.Clear
End Function
		
		
Function UnPackGUID(strGUID)
	UnPackGUID=""
	
	Dim tmpBuf
	    tmpBuf = _
	        StrReverse(Mid(strGUID, 1, 8)) & "-" & _
	        StrReverse(Mid(strGUID, 9, 4))& "-"  & _
	        StrReverse(Mid(strGUID, 13, 4)) & "-" & _
	        swapNibbles(Mid(strGUID, 17, 4)) & "-" & _
	        swapNibbles(Mid(strGUID, 21, 12))
	
	UnPackGUID = "{" & tmpBuf & "}"
End Function


Function swapNibbles(buffer)
    Dim tmpBuf ,i
    tmpBuf = ""
    i = 1
    Do While i <= Len(buffer)
     tmpBuf = tmpBuf & Mid(buffer, i + 1, 1) & Mid(buffer, i, 1)
     i = i + 2
    Loop
    swapNibbles = tmpBuf
End Function




check_installed_guid()


Die Zeilen, die die Version umrechnen, sind folgende

Code:
versioninstalled1 = (versioninstalled\65536\256) & "." & _
	(versioninstalled\65535 Mod 256) & "." & _
	(versioninstalled Mod 65536)
 
Zurück
Oben