[Bug 33661] Microsoft SQL Server Management Studio Express 2008 R2 installer fails (missing registry configuration data for the Windows Performance Library)

wine-bugs at winehq.org wine-bugs at winehq.org
Sun May 26 06:49:30 CDT 2013


http://bugs.winehq.org/show_bug.cgi?id=33661

Anastasius Focht <focht at gmx.net> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|UNCONFIRMED                 |NEW
                 CC|                            |focht at gmx.net
          Component|-unknown                    |advapi32
            Summary|Microsoft SQL Server        |Microsoft SQL Server
                   |Management Studio Express   |Management Studio Express
                   |2008 R2 installer fails     |2008 R2 installer fails
                   |                            |(missing registry
                   |                            |configuration data for the
                   |                            |Windows Performance
                   |                            |Library)
     Ever Confirmed|0                           |1

--- Comment #1 from Anastasius Focht <focht at gmx.net> 2013-05-26 06:49:30 CDT ---
Hello folks,

confirming.

Interestingly even for Windows there are numerous reports about this issue -
although locale related (search for "Microsoft SQL 2008 Setup: Performance
Counter Registry Hive consistency check failed").

The sub-installer tries to read the registry configuration data for the Windows
Performance Library which is obviously missing in Wine.

Relevant part of trace log:

--- snip ---
002e:Call KERNEL32.CreateProcessW(00336150 L"C:\\Program Files\\Microsoft SQL
Server\\100\\Setup Bootstrap\\Release\\x86\\setup100.exe",0032c334
L"\"C:\\Program Files\\Microsoft SQL Server\\100\\Setup
Bootstrap\\Release\\x86\\setup100.exe\"   /q /FEATURES=SSMS /ACTION=Install 
/ACTION=Install /WORKFLOW=Install /TIMESTAMP=20130526_124202 /LOGMARKER=
/MEDIASOURCE=\"C:\\8f85d9cd0da97d9a01988db39973b870\\\\\"
/INSTALLMEDIAPATH=\"C:\\8f85d9cd0da97d9"...,00000000,00000000,00000001,00000020,00000000,00000000,0032c2cc,0032c318)
ret=010112cf
...
0054:Call KERNEL32.__wine_kernel_init() ret=7bc5444e
002e:Ret  KERNEL32.CreateProcessW() retval=00000001 ret=010112cf 
...
0054:Call advapi32.RegOpenKeyExW(80000002,0155146c
L"SOFTWARE\\Microsoft\\Windows
NT\\CurrentVersion\\Perflib",00000000,00020019,0033ef70) ret=0037a9a3
0054:Ret  advapi32.RegOpenKeyExW() retval=00000000 ret=0037a9a3
...
0054:Call advapi32.RegQueryValueExW(0000260c,01551220 L"Last
Counter",00000000,0033efb8,00000000,0033efb4) ret=0037ac1e
0054:Ret  advapi32.RegQueryValueExW() retval=00000002 ret=0037ac1e
...
0054:Call advapi32.RegQueryValueExW(0000260c,0155124c L"Last
Help",00000000,0033efb8,00000000,0033efb4) ret=0037ac1e
0054:Ret  advapi32.RegQueryValueExW() retval=00000002 ret=0037ac1e
...
0054:Call advapi32.RegOpenKeyExW(80000002,01551e0c
L"SOFTWARE\\Microsoft\\Windows
NT\\CurrentVersion\\Perflib\\009",00000000,00020019,0033ef70) ret=0037a9a3
0054:Ret  advapi32.RegOpenKeyExW() retval=00000002 ret=0037a9a3
...
0054:Call advapi32.RegCloseKey(0000260c) ret=030e93ab
0054:Ret  advapi32.RegCloseKey() retval=00000000 ret=030e93ab
...
0054:Call KERNEL32.WriteFile(00000010,00a9cf14,000000bb,0033f04c,00000000)
ret=0037a89f
The performance counter registry hive is corrupted. To continue, you must
repair the performance counter registry hive. For more information, see
http://support.microsoft.com/kb/300956.
0054:Ret  KERNEL32.WriteFile() retval=00000001 ret=0037a89f 
--- snip ---

The sub-installer and some components are mixed/managed code.
Relevant part extracted by using "ILSpy" tool:

--- snip ---
...
private bool CheckPerfMonCounter()
{
  string text = "SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Perflib";
  int major = Environment.get_OSVersion().get_Version().get_Major();
  int lCID = CultureInfo.get_InstalledUICulture().get_LCID();
  string text2;
  if (major >= 6 && (lCID == 1028 || lCID == 2052 || lCID == 1046))
  {
    text2 = string.Format("{0,4}", lCID.ToString("X")).Replace(" ", "0");
  }
  else
  {
    if (31748 == CultureInfo.get_InstalledUICulture().get_Parent().get_LCID())
    {
      text2 = "004";
    }
    else
    {
      text2 = string.Format("{0,3}",
CultureInfo.get_InstalledUICulture().get_Parent().get_LCID().ToString("X")).Replace("
", "0");
    }
  }
  int num = -1;
  int num2 = -1;
  int num3 = -1;
  int num4 = -1;
  using (RegistryKey registryKey = Registry.LocalMachine.OpenSubKey(text))
  {
    if (registryKey == null)
    {
      bool result = false;
      return result;
    }
    num = Convert.ToInt32(registryKey.GetValue("Last Counter"));
    num2 = Convert.ToInt32(registryKey.GetValue("Last Help"));
    StringBuilder stringBuilder = new StringBuilder(text);
    stringBuilder.Append(Path.DirectorySeparatorChar);
    stringBuilder.Append(text2);
    using (RegistryKey registryKey2 =
Registry.LocalMachine.OpenSubKey(stringBuilder.ToString()))
    {
      if (registryKey2 == null)
      {
        bool result = false;
        return result;
      }
      string[] array = (string[])registryKey2.GetValue("Counter");
      string[] array2 = (string[])registryKey2.GetValue("Help");
      int num5 = 2;
      if (array == null || array.Length <= 0)
      {
        bool result = false;
        return result;
      }
      if (string.IsNullOrEmpty(array[array.Length - 1]))
      {
        num5 = 3;
      }
      num3 = Convert.ToInt32(array[array.Length - num5]);
      int num6 = 2;
      if (array2 == null || array2.Length <= 0)
      {
        bool result = false;
        return result;
      }
      if (string.IsNullOrEmpty(array2[array2.Length - 1]))
      {
        num6 = 3;
      }
      num4 = Convert.ToInt32(array2[array2.Length - num6]);
    }
  }
  return num >= num3 && num2 >= num4;
}
--- snip ---

Unless there is some work on this, namely the perflib part of advapi32 you
might get around by faking the registry keys.

Here is link to a diagram that shows how perfdata consumers, the registry, PDH,
and performance DLLs and application providers work together:

http://msdn.microsoft.com/en-us/library/windows/desktop/aa371643%28v=vs.85%29.aspx

(just to get the big picture).

Regards

-- 
Configure bugmail: http://bugs.winehq.org/userprefs.cgi?tab=email
Do not reply to this email, post in Bugzilla using the
above URL to reply.
------- You are receiving this mail because: -------
You are watching all bug changes.



More information about the wine-bugs mailing list