Jump to content

check .NET Framework 4, or 4.5.* is installed


Mecano
 Share

Go to solution Solved by j0kky,

Recommended Posts

Dear forum members,
 
I try to find a solution which version of the .NET Framework 4 is installed (or not at all) on the PC.
From the scriptingguy site I have made this one:

#cs ----------------------------------------------------------------------------

    AutoIt Version: 3.2.10.0
    Author:         myName

    Script Function:
    Template AutoIt script.

    It’s very important to know which version of the .NET Framework is installed on a computer,
    especially when you’re working with custom applications written in-house; the Scripting
    Guys know from painful experience that custom applications often require a very specific version of the .NET Framework.
    Any version earlier - or later - and the application might not run.

    Because of that you might think there’s a very quick, easy way to determine which version (or versions) of the .NET Framework
    is installed on a computer. Well, if there is, we couldn’t find it: we were unable to locate a COM object or a specific registry key
    that could tell us, once and for all, which version is installed on a computer. The best we could do was this brute force method,
    a method which is accompanied by a caveat we’ll talk about momentarily.
    http://blogs.technet.com/b/heyscriptingguy/archive/2005/07/12/how-can-i-tell-which-version-of-the-net-framework-is-installed-on-a-computer.aspx
#ce ----------------------------------------------------------------------------

Opt("MustDeclareVars", 1)
Global $wbemFlagReturnImmediately = 0x10, _ ;DO NOT CHANGE
        $wbemFlagForwardOnly = 0x20 ;DO NOT CHANGE

local $NetVersion1 = _GetNetVersion1()
MsgBox(0, ".NET Framework ", $NetVersion1) ; debug

Func _GetNetVersion1()
    Local $strComputer = "localhost"

    local $objWMIService = ObjGet("winmgmts:\\" & $strComputer & "\") ; ???
    ; Local $objWMIService = ObjGet("winmgmts:\\" & $strComputer & "\root\CIMV2") ; ?
    ; Local $objWMIService = ObjGet("winmgmts:\\" & @ComputerName & "\root\CIMV2") ; ?
    ; Local $objWMIService = ObjGet("winmgmts:{(RemoteShutdown)}//" & $strComputer & "\root\CIMV2") ; ?

    ;Local $colItems = $objWMIService.ExecQuery("Select * from Win32_Product"); ?
     Local $colItems = $objWMIService.ExecQuery("SELECT * FROM Win32_Product", "WQL", _
                                    $wbemFlagReturnImmediately + $wbemFlagForwardOnly)


    For $objItem In $colItems
        If StringInStr($objItem.Name, "Microsoft .NET Framework") > 0 Then
            If $objItem.Version > "4.*" Then
                Return "Found: " & $objItem.Name & @CRLF & "Version: " & $objItem.Version
            Else
                Return "Microsoft .NET Framework v.4 not found!"
            EndIf
        EndIf
    Next

EndFunc   ;==>_GetNetVersion

Don't know if this the right way to do it, never worked with the WMIService
 
Below I found a other Autoitscript

local $NetVersion2 = _GetNetVersion2()
MsgBox(0, ".NET Framework ", $NetVersion2) ; debug

Func _GetNetVersion2()
    Dim $strComputer, $objWMIService

    $strComputer = "."
    $objWMIService = ObjGet("winmgmts:{(RemoteShutdown)}//" & $strComputer & "\root\CIMV2")
    Local $colItems = ""
    $colItems = $objWMIService.ExecQuery("Select * from Win32_Product")

    For $objItem In $colItems
        Select
            Case StringInStr($objItem.Name, 'Microsoft .NET Framework')
                If $objItem.Version > "4.*" Then
                    Return "Found: " & $objItem.Name & @CRLF & "Version: " & $objItem.Version
                Else
                    Return "Microsoft .NET Framework v.4 not found!"
                EndIf
        EndSelect
    Next
EndFunc   ;==>_Read_Products

 
 
Both scripts are quite slow, brute force method (loop  through the collection of software products installed using .MSI files).
 
From the >autoitscript.com/forum I found this script below but shows .NET Framework v4 while I working with 4.5.2.
Other versions of .NET are not important, the only thing I want to know which version of .NET 4 is installed.
 

; ==========================================================================================================================
; Func _dotNetGetVersions($bOnlyInstalled=False)
;
; Function to return information on which .NET versions are/were installed.
;   NOTES: No Service Pack information is retrieved, although that can be obtained using the methods
;       in the MSDN link below.
;
;   Also NOTE: As with anything I program (in full or part), keep the header WITH the function if used or shared.
;
; .NET Framework detection resource:
;   MSDN KB318785: 'How to determine which versions and service pack levels of the Microsoft .NET Framework are installed':
;   @ <a href='http://msdn.microsoft.com/en-us/kb/kbarticle.aspx?id=318785' class='bbc_url' title='External link' rel='nofollow external'>http://msdn.microsoft.com/en-us/kb/kbarticle.aspx?id=318785</a>
;
; $bOnlyInstalled = If True, it will not report on any versions that were uninstalled
;
; Returns:
;   Success: An array of information, as follows:
;       [0][0] = Total # found
;       [x][0] = Numerical version (can be whole number or floating point [1, 1.1, 2, 3, 3.5, 4])
;       [x][1] = Full version name string - this can be used to probe further sub-version info (example: "v2.0.50727")
;       [x][2] = 0 or 1 - indicates whether 'client' or normal installation is installed
;                (From version 4+, there can be a client and/or a full install - though full seems to install client.)
;       [x][3] = 0 or 1 - indicates whether 'full' install of the .NET component is installed (version 4+ only)
;   Failure: '' and @error set:
;       @error = -3 = .NET key could not be read, or .NET is not installed (the latter *most* likely)
;           (@extended returns @error state from last Reg* call.)
;
; Author: Ascend4nt
; ==========================================================================================================================

Func _dotNetGetVersions($bOnlyInstalled=False)
    Local $i=1,$iClientInstall,$iFullInstall,$iNum,$aVersions[100][4],$iTotal=0,$bVer4Found=0
    Local $sKey="HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP",$sSubKey
    ; Detect v1.0 (special key)
    RegRead("HKEY_LOCAL_MACHINE\Software\Microsoft\.NETFramework\Policy\v1.0","3705")
    ; If value was read (key exists), and is of type REG_SZ (1 as defined in <Constants.au3>), v1.0 is installed
    If @error=0 And @extended=1 Then
        $iTotal+=1
        $aVersions[$iTotal][0]=1.0
        $aVersions[$iTotal][1]='v1.0.3705'
        $aVersions[$iTotal][2]=1
        $aVersions[$iTotal][3]=1
    EndIf
    While 1
        $iClientInstall=0
        $iFullInstall=0
        $sSubKey=RegEnumKey($sKey,$i)
        If @error Then ExitLoop
        $i+=1
        ; 'v4.0' is a deprecated version.  Since it comes after 'v4' (the newer version) while enumerating,
        ;   a simple check if 'v4' has already been found is sufficient
        If $sSubKey='v4.0' And $bVer4Found Then ContinueLoop
        $iNum=Number(StringMid($sSubKey,2)) ; cuts off at any 2nd decimal points (obviously)
        ; Note - one of the SubKeys is 'CDF'. Number() will return 0 in this case [we can safely ignore that]
        If $iNum=0 Then ContinueLoop
;~      ConsoleWrite(".NET Framework SubKey #"&$i&": "&$sSubKey&", Number extracted (0 for non-versioned items):"&$iNum&@LF)
        If $iNum<4 Then
            $iClientInstall=RegRead($sKey&'\'&$sSubKey,'Install')
            If $iClientInstall Then $iFullInstall=1     ; older versions were all-or-nothing I believe
;~          If @error Then $iClientInstall=0    ; (@error from $iClientInstall) -> caught below
        Else
            ; Version 4 works with one or both of these keys.  One can only hope new versions keep the same organization
            $iFullInstall=RegRead($sKey&'\'&$sSubKey&'\Full','Install')
            If @error Then $iFullInstall=0
            $iClientInstall=RegRead($sKey&'\'&$sSubKey&'\Client','Install')
;~          If @error Then $iClientInstall=0        ; Caught below
            If $iNum<5 Then $bVer4Found=True
        EndIf
        If @error Then $iClientInstall=0
        If $bOnlyInstalled And $iClientInstall=0 And $iFullInstall=0 Then ContinueLoop
        $iTotal+=1
        $aVersions[$iTotal][0]=$iNum
        $aVersions[$iTotal][1]=$sSubKey
        $aVersions[$iTotal][2]=$iClientInstall
        $aVersions[$iTotal][3]=$iFullInstall
    WEnd
    If $iTotal=0 Then Return SetError(-3,@error,'')
    $aVersions[0][0]=$iTotal
    ReDim $aVersions[$iTotal+1][4]
    Return $aVersions
EndFunc

; ------- TEST ----------

#include <Array.au3>
$adotNetVersions=_dotNetGetVersions()
$adotNetVersions[0][0]="Main Version #"
$adotNetVersions[0][1]="Full version string"
$adotNetVersions[0][2]="Client/General Install?"
$adotNetVersions[0][3]="Full Install?"
_ArrayDisplay($adotNetVersions,'.NET versions')

 
Somebody know a good solution, the script has to find .NET 4.* on x32 and x64 machines
 
Regards, Mecano

Link to comment
Share on other sites

I don't know why you're using wmic for this, but I guess through registry would be easy, list HKEY_LOCAL_MACHINESOFTWAREMicrosoftNET Framework SetupNDP

 
This should do the job
Local $z=0,$sKeyName,$success=0
Do
    $z+=1
    $sKeyName = RegEnumKey("HKLM\SOFTWARE\Microsoft\NET Framework Setup\NDP",$z)
    If StringRegExp($sKeyName,"v4|v4.\d+") Then
        ConsoleWrite(".NET Framework v4 installed!"&@LF)
        $success=1
    EndIf
Until $sKeyName='' Or $success
if Not $success then consolewrite("You need install it son."&@lf)
Exit
Edited by Kyan

Heroes, there is no such thing

One day I'll discover what IE.au3 has of special for so many users using it.
C'mon there's InetRead and WinHTTP, way better
happy.png

Link to comment
Share on other sites

Wow it's fast, but it I need the ,NET 4 version (this is for debugging)
 

I don't know why you're using wmic for this, but I guess through registry would be easy, list

The reason it will found the installed version .NET 4 version (maybe my question was not clear enough)

wmic :

Found: Microsoft .NET Framework 4.5.1 (NLD)
Version: 4.5.50938

not good, pickup the first instance this will find the version of the .NET4 language pack
 
The installed .NET 4 version used, is 4.5.2. (v4.5.51209)
 
Something that loop trough the RegKey CurrentVersionUninstall and collect all .NET 4 instances
 
example find: Microsoft .NET Framework 4.5.2

_NETFramework4()
Func _NETFramework4()
    Local $sRegKey, $iKey, $sHold, $sNETRegKey
$sRegKey = "HKLM64\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\"
$iKey = 1
While 1
    $sHold = RegEnumKey($sRegKey, $iKey)
    If @error Then ExitLoop
    $iKey += 1
    If RegRead($sRegKey & $sHold, "DisplayName") = 'Microsoft .NET Framework 4.5.2' Then
        $sNETRegKey = RegRead($sRegKey & $sHold, "DisplayVersion")
        If Not @error Then
            ExitLoop
        EndIf
    EndIf
WEnd
MsgBox(4096, "Result", "Microsoft .NET Framework 4.5.2" & @CRLF & "version: " & $sNETRegKey)
EndFunc

 
Script below will loop trough all installed software, here I need to filter the .NET 4 out of it (inclusive installed language-pack)  and return it to a msgbox or ClipPut (working with arrays is not my best skills).

#comments-start
    Title:          Computer Information Automation UDF Library for AutoIt3 - EXAMPLES
    Filename:       CompInfoExamples.au3
    Description:    Examples using the UDF's from CompInfo.au3
    Author:         Jarvis J. Stubblefield (JSThePatriot) http://www.vortexrevolutions.com/
    Version:        00.03.08
    Last Update:    11.09.06
    Requirements:   AutoIt v3.2 +, Developed/Tested on WindowsXP Pro Service Pack 2
    Notes:          Errors associated with incorrect objects will be common user errors. AutoIt beta 3.1.1.63 has added an ObjName()
    function that will be used to trap and report most of these errors.

    Special thanks to Firestorm (Testing, Use), Koala (Testing, Bug Fix), and everyone else that has helped in the creation of this Example File.
#comments-end


Func _ComputerGetSoftware(ByRef $aSoftwareInfo)
    Local Const $UnInstKey  = "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall"
    Local $i = 1
    Dim $aSoftwareInfo[1][4]

    While 1
        $AppKey = RegEnumKey($UnInstKey, $i)
        If @error <> 0 Then ExitLoop
        ReDim $aSoftwareInfo[UBound($aSoftwareInfo) + 1][2]
        $aSoftwareInfo[$i][0]   = StringStripWS(StringReplace(RegRead($UnInstKey & "\" & $AppKey, "DisplayName"), " (remove only)", ""), 3)
        $aSoftwareInfo[$i][1]   = StringStripWS(RegRead($UnInstKey & "\" & $AppKey, "DisplayVersion"), 3)
        $i += 1
    WEnd

    $aSoftwareInfo[0][0] = UBound($aSoftwareInfo, 1) - 1
    If $aSoftwareInfo[0][0] < 1 Then
        SetError(1, 1, 0)
    EndIf
EndFunc

Dim $Software

_ComputerGetSoftware($Software)
If @error Then
    $error = @error
    $extended = @extended
    Switch $extended
        Case 1
            _ErrorMsg("Array contains no data.")
    EndSwitch
EndIf

For $i = 1 To $Software[0][0] Step 1
    MsgBox(0, "_ComputerGetSoftware", "Name: " & $Software[$i][0] & @CRLF & _
            "Version: " & $Software[$i][1])
Next


Func _ErrorMsg($message, $time = 0)
    MsgBox(48 + 262144, "Error!", $message, $time)
EndFunc
Edited by Mecano
Link to comment
Share on other sites

hum, the last script doesn't do the job?

EDIT2:

ConsoleWrite(NetFrameworkVersion())
Exit

Func NetFrameworkVersion()
    Local $sKey,$sBaseKeyName,$sBVersion,$sBBVersion,$versions='',$z=0,$i=0
    $sKey = "HKLM\SOFTWARE\Microsoft\NET Framework Setup\NDP"
    Do
        $z+=1
        $sBaseKeyName = RegEnumKey($sKey,$z)
        If @error Then ExitLoop
        If StringLeft($sBaseKeyName,1) = "v" Then
            ;1st check
            $sBVersion = RegRead($sKey&"\"&$sBaseKeyName,"Version")
            If Not @error Then
                $versions&=$sBVersion&@LF
            Else
                $i=0
                Do
                    $i+=1
                    $sKeyName = RegEnumKey($sKey&"\"&$sBaseKeyName,$i)
                    If @error Then ExitLoop
                    $sBBVersion = RegRead($sKey&"\"&$sBaseKeyName&"\"&$sKeyName,"Version")
                Until $sKeyName='' Or $sBBVersion <> ''
                If $sBBVersion <> '' Then $versions&=$sBBVersion&@LF
            EndIf
        EndIf
    Until $sBaseKeyName = ''
    Return $versions
EndFunc 

If you want it in array would be easier to work with the different values

you're looking for a specific version? or at least version 4.0 needs to be installed? if so you can match that version through NetFrameworkVersion() function and return 1 or 0 (simplifies your script)

Edited by Kyan

Heroes, there is no such thing

One day I'll discover what IE.au3 has of special for so many users using it.
C'mon there's InetRead and WinHTTP, way better
happy.png

Link to comment
Share on other sites

Kyan, yes .NET 4 is between a big list of installed software
 
need to filter the .NET 4 out of it (inclusive installed language-pack)
and return it to a msgbox or ClipPut (working with arrays is not my best skills).
 
@j0kky the problem with HKEY_LOCAL_MACHINESOFTWAREMicrosoftNET Framework SetupNDPv4
will found a lot of keys, I need the current installed version(s)
 
 
Jscv9rH.png

regkeys NET Framework SetupNDPv4:

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4]

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Client]
"Version"="4.5.51209"
"TargetVersion"="4.0.0"
"Install"=dword:00000001
"MSI"=dword:00000001
"Servicing"=dword:00000000
"Release"=dword:0005cbf5
"InstallPath"="C:\\Windows\\Microsoft.NET\\Framework64\\v4.0.30319\\"

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Client\1033]
"Version"="4.5.51209"
"TargetVersion"="4.0.0"
"Install"=dword:00000001
"Servicing"=dword:00000000
"Release"=dword:0005cbf5

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Client\1043]
"Version"="4.5.50938"
"TargetVersion"="4.0.0"
"Install"=dword:00000001
"Servicing"=dword:00000000
"Release"=dword:0005c786

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full]
"Version"="4.5.51209"
"TargetVersion"="4.0.0"
"Install"=dword:00000001
"MSI"=dword:00000001
"Servicing"=dword:00000000
"InstallPath"="C:\\Windows\\Microsoft.NET\\Framework64\\v4.0.30319\\"
"Release"=dword:0005cbf5

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full\1033]
"Version"="4.5.51209"
"TargetVersion"="4.0.0"
"Install"=dword:00000001
"Servicing"=dword:00000000
"Release"=dword:0005cbf5

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full\1043]
"Version"="4.5.50938"
"TargetVersion"="4.0.0"
"Install"=dword:00000001
"Servicing"=dword:00000000
"Release"=dword:0005c786

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4.0]
@="deprecated"

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4.0\Client]
"Version"="4.0.0.0"
"Install"=dword:00000001

 
Edit1;

you're looking for a specific version? or at least version 4.0 needs to be installed?


At least 4.0 needs to be installed and if there are any language packs installed... see image

Edited by Mecano
Link to comment
Share on other sites

From what I see, you can check the main version through HKEY_LOCAL_MACHINESOFTWAREMicrosoftNET Framework SetupNDP subkeys, v4 or v4.0, for LP's you just need to look for subkeys inside v4.0 or v4 with 4digits (1033=english; 2070=portuguese; 1043=netherlands)

Heroes, there is no such thing

One day I'll discover what IE.au3 has of special for so many users using it.
C'mon there's InetRead and WinHTTP, way better
happy.png

Link to comment
Share on other sites

Kyan, I think I am lost, after trying this
 

if so you can match that version through NetFrameworkVersion() function and return 1 or 0 (simplifies your script)


gonna take a little break otherwise I get :wacko:

Kyan thank you for support

Link to comment
Share on other sites

Using >_UninstallList, you can list all installed versions :

#Include <Array.au3>


Local $aVersions[1], $iIndex = 0

Local $aList = _UninstallList("DisplayName", "Microsoft .NET Framework", 0, 3)
If NOT IsArray($aList) Then Exit

For $i = 1 To $aList[0][0]
    For $j = 0 To Ubound($aVersions) - 1
        If $aList[$i][4] = $aVersions[$j] Then ContinueLoop 2
    Next
    
    Redim $aVersions[$iIndex + 1]
    $aVersions[$iIndex] = $aList[$i][4]
    $iIndex += 1
Next
_ArrayDisplay($aVersions)
Link to comment
Share on other sites

jguinch, this is a great function thank you, _ArrayDisplay shows the installed version(s)

How to save this information to ClipPut or txt file with "DisplayName" and "DisplayVersion"?

Example ClipPut or txt file

Microsoft .NET Framework 4.5.1 (NLD) Version: 4.5.50938

Microsoft .NET Framework 4.5.2  Version: 4.5.51209

or Example2

Microsoft .NET Framework 4.5.1 (NLD)

Version: 4.5.50938

Microsoft .NET Framework 4.5.2 

Version: 4.5.51209

_FileWriteFromArray($sFilePath, $aVersions) still saves only the version numbers

Examples.txt

4.5.51209
4.5.50938

arrays are not mine best skills (still learning)

Link to comment
Share on other sites

Local $aList = _UninstallList("DisplayName", "Microsoft .NET Framework", 0, 3)
If NOT IsArray($aList) Then Exit
_ArrayDisplay($aList)

For $i = 1 To $aList[0][0]
    FileWrite("framworkversions.txt", $aList[$i][2] & @TAB & $aList[$i][4] & @CRLF)
Next

Edited by jguinch
Link to comment
Share on other sites

jguinch,
 
Thanks for the code works great with Win 7, after testing with Win 8 the UninstallList is not a option
By default Windows 8 has .NET 4.5 installed, the function will only detect .NET if  .NET 4.5.1 or 4.5.2 is installed.
 
sorry :oops:
 
 
Back to:
HKEY_LOCAL_MACHINESOFTWAREMicrosoftNET Framework SetupNDP
http://msdn.microsoft.com/en-us/library/hh925568(v=vs.110).aspx

 
Fixing a .NET Framework 4.5.1 detection logic problem on Windows 8.1

The deployment guide says that an application can test whether the .NET Framework 4.5 or later is installed by checking the HKEY_LOCAL_MACHINESOFTWAREMicrosoftNET Framework SetupNDPv4Full folder in the registry for a DWORD value named Release. A value of 378758 means that the .NET Framework 4.5.1 is installed. This logic works correctly for the redistributable version of the .NET Framework 4.5.1. However, on Windows 8.1, the Release value is set to 378675 instead, so this logic doesn’t work on Windows 8.1.
I have updated all of the following tools and samples to correctly detect the .NET Framework 4.5.1 in both the redistributable case and the Windows 8.1 OS install case:

 
 
Don't know if it's possible in Autoit detecting by  DWORD value (the link below is with C++ source)
http://blogs.msdn.com/b/astebner/archive/2009/06/16/9763379.aspx

http://cid-27e6a35d1a492af7.skydrive.live.com/self.aspx/Blog|_Tools/detectfx|_new.cpp.txt
 
Creating a Visual Studio project to compile the sample code
The sample code available for download via the links above is in the form of a single C++ source (.cpp) file.  If you are having trouble getting this code to compile on your system, you can refer to the instructions in this blog post to create a Visual C++ project that can be used to compile the sample code into a sample executable file.

 
 
 
 

subkeys, v4 or v4.0, for LP's you just need to look for subkeys inside v4.0 or v4 with 4digits (1033=english; 2070=portuguese; 1043=netherlands)

 

this what I done so far

If StringLeft($sBaseKeyName,1) = "v" Then

changed to:

If StringLeft($sBaseKeyName,2) = "v4" Then

Console:

4.5.51209
4.0.0.0

I have no idea how to look for the subkeys

Edited by Mecano
Link to comment
Share on other sites

  • Solution

Using official documentation that I already provided in post >#4, if you want to know only if at least version 4 is installed you can do:

$version = RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Client", "Version")
If @error Then
    $version = RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full", "Version")
    If @error Then
        $version = RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full", "Release")
        If @error Then
            ConsoleWrite("Net Framework v4 and higher version are not installed" & @CRLF)
        Else
            $version = Dec($version)
        EndIf
    EndIf
EndIf
If $version Then ConsoleWrite("At least Net Framework v4 is installed with version: " & $version)

The meaning of $version value for .NET Framework 4.5.x is reported in this page.

If you want to know about Language Pack you can read this one for v4 and this one for v4.5.x

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...