Link to home
Start Free TrialLog in
Avatar of farsight
farsight

asked on

Get OCX version

Using .NET, how can I determine the the version when given some file "XYZ.ocx"?
ASKER CERTIFIED SOLUTION
Avatar of caner_elci
caner_elci

Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial
Avatar of farsight
farsight

ASKER

I found this on my own.  I'm checking to see if the results are the same.

---

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfSystemDiagnosticsFileVersionInfoClassGetVersionInfoTopic.asp

Here's VB.NET Sample code. I tried to pick OCXes I thought would be on your system.  It shows the "Product Version", not the "File Version", at least in cases like comdlg32.ocx.

comdlg32.ocx
  File    Version: 6.00.88.77
  Product Version: 6.00.8877

--- VB.NET ---

    Public Shared Sub Test_GetFileVersion()
        Dim filenames As String() = New String() { _
            "%systemroot%\Notepad.exe", _
            "%systemroot%\comctl32.ocx", _
            "%systemroot%\comdlg32.ocx", _
            "%systemroot%\mci32.ocx", _
            "%systemroot%\MSCOMM32.ocx", _
            "%systemroot%\mswinsck.ocx", _
            "%systemroot%\richtx32.ocx", _
            "%systemroot%\sysinfo.ocx", _
            "%systemroot%\sysmon.ocx", _
            "noSuchFile.ocx" _
            }

        For Each filename As String In filenames
            Try
                ' Get the file version for the notepad.
                Dim myFileVersionInfo As FileVersionInfo = FileVersionInfo.GetVersionInfo( _
                    filename.Replace("%systemroot%", System.Environment.SystemDirectory))
                ' Print the file name and version number.
                Debug.WriteLine("Filename: " & filename & System.Environment.NewLine & _
                    "  File: " & myFileVersionInfo.FileDescription & System.Environment.NewLine & _
                    "  Version number: " & myFileVersionInfo.FileVersion)
            Catch
                Debug.WriteLine("File: " & filename & " -- not found.")
            End Try
        Next
    End Sub

--- Output ---

Filename: %systemroot%\Notepad.exe
  File: Notepad
  Version number: 5.00.2140.1
Filename: %systemroot%\comctl32.ocx
  File: Windows Common Controls ActiveX Control DLL
  Version number: 6.00.8022
Filename: %systemroot%\comdlg32.ocx
  File: CMDialog ActiveX Control DLL
  Version number: 6.00.8877
Filename: %systemroot%\mci32.ocx
  File: MCI OLE Control DLL
  Version number: 6.00.8418
Filename: %systemroot%\MSCOMM32.ocx
  File: MSComm
  Version number: 6.00.8169
Filename: %systemroot%\mswinsck.ocx
  File: Microsoft Winsock Control DLL
  Version number: 6.00.8877
Filename: %systemroot%\richtx32.ocx
  File: RichTx32.OCX
  Version number: 6.00.8877
Filename: %systemroot%\sysinfo.ocx
  File: SysInfo
  Version number: 6.00.8877
Filename: %systemroot%\sysmon.ocx
  File: System Monitor Control
  Version number: 5.00.2195.6660
File: noSuchFile.ocx -- not found.

I added a little driver to your code, and tried it.
It does indeed produce the same results.
Thanks for the effort.

--- driver --- C# ---

            unsafe public void Test_GetFileVersion()
            {
                  String[] filenames = {
                        @"%systemroot%\Notepad.exe",
                        @"%systemroot%\comctl32.ocx",
                        @"%systemroot%\comdlg32.ocx",
                        @"%systemroot%\mci32.ocx",
                        @"%systemroot%\MSCOMM32.ocx",
                        @"%systemroot%\mswinsck.ocx",
                        @"%systemroot%\richtx32.ocx",
                        @"%systemroot%\sysinfo.ocx",
                        @"%systemroot%\sysmon.ocx",
                        @"noSuchFile.ocx"
                  };

                  foreach (String filename in filenames)
                  {
                        try
                        {
                              // Get the file version for the notepad.
                              string version = GetFileVersion(filename.Replace("%systemroot%", System.Environment.SystemDirectory));
                              // Print the file name and version number.
                              Debug.WriteLine("Filename: " + filename + System.Environment.NewLine +
                                    "  Version number: " + version);
                        }
                        catch (Exception ex)
                        {
                              Debug.WriteLine("File: " + filename + " -- not found.");
                        }
                  } // foreach
            } // Test_GetFileVersion

--- Output ---

Filename: %systemroot%\Notepad.exe
  Version number: 5.00.2140.1
Filename: %systemroot%\comctl32.ocx
  Version number: 6.00.8022
Filename: %systemroot%\comdlg32.ocx
  Version number: 6.00.8877
Filename: %systemroot%\mci32.ocx
  Version number: 6.00.8418
Filename: %systemroot%\MSCOMM32.ocx
  Version number: 6.00.8169
Filename: %systemroot%\mswinsck.ocx
  Version number: 6.00.8877
Filename: %systemroot%\richtx32.ocx
  Version number: 6.00.8877
Filename: %systemroot%\sysinfo.ocx
  Version number: 6.00.8877
Filename: %systemroot%\sysmon.ocx
  Version number: 5.00.2195.6660
Filename: noSuchFile.ocx
  Version number: Cannot get version info size
caner_elci,
Please post a tiny "I answered that question." message at this link, so I can give you those points, too.
https://www.experts-exchange.com/questions/20949611/Get-OCX-Version.html
Ok, done.. Have a nice coding..

Caner