[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