https://bugs.winehq.org/show_bug.cgi?id=37001
Bug ID: 37001 Summary: APB Reloaded 1.x (MMORPG) launcher crashes on startup (some CIM data type to OLE variant (VT) mappings are incorrect) Product: Wine Version: 1.7.23 Hardware: x86 OS: Linux Status: NEW Severity: normal Priority: P2 Component: wmi&wbemprox Assignee: wine-bugs@winehq.org Reporter: focht@gmx.net
Hello folks,
as the summary says.
The bootstrapper installer downloads the client which is ~6GB
After installing the client, .NET Framework 2.0, PunkBuster, the launcher fails on startup (before updating itself).
Managed backtrace:
--- snip --- $ pwd /home/focht/.wine/drive_c/Program Files/GamersFirst/APB Reloaded/Launcher
$ wine ./APBLauncher.exe ... Unhandled Exception: System.TypeInitializationException: The type initializer for 'Hosting.cLog' threw an exception. ---> System.InvalidCastException: Specified cast is not valid. at System.Management.PropertyData.MapWmiValueToValue(Object wmiValue, CimType type, Boolean isArray) at System.Management.PropertyData.get_Value() at Hosting.cOSInfoWMI.IWin32.Print(PrintDelegate Print) at Hosting.cLog.StartDiagnoseMessages() at Hosting.cLog.WriteDiagnoseMessages() at Hosting.cLog..cctor() --- End of inner exception stack trace --- at Hosting.cLog.Warning(String sMessage) at Hosting.Program.CurrentDomain_UnhandledException(Object sender, UnhandledExceptionEventArgs e) --- snip ---
Managed code from launcher:
--- snip --- // Hosting.cLog private static void StartDiagnoseMessages() { cLog.Write("[APB Launcher] " + DateTime.get_Now().ToLongDateString() + ", " + DateTime.get_Now().ToLongTimeString()); cLog.StartDiagnoseMessageUserName(); cLog.StartDiagnoseMessageUAC(); ArrayList arrayList = new ArrayList(); arrayList.Add(new cOSInfoWMI.Win32_OperatingSystem()); arrayList.Add(new cOSInfoWMI.Win32_Processor()); arrayList.Add(new cOSInfoWMI.Win32_ComputerSystem()); arrayList.Add(new cOSInfoWMI.Win32_NetworkAdapterConfiguration()); arrayList.Add(new cOSInfoWMI.Win32_LogicalDisk()); arrayList.Add(new cOSInfoWMI.Win32_VideoController()); arrayList.Add(new cOSInfoWMI.Win32_SoundDevice()); IEnumerator enumerator = arrayList.GetEnumerator(); try { while (enumerator.MoveNext()) { cOSInfoWMI.IWin32 win = (cOSInfoWMI.IWin32)enumerator.get_Current(); win.Print(new cOSInfoWMI.IWin32.PrintDelegate(cLog.Write)); } } finally { IDisposable disposable = enumerator as IDisposable; if (disposable != null) { disposable.Dispose(); } } cLog.Flush(); }
...
using Hosting; using System; public class Win32_ComputerSystem : cOSInfoWMI.IWin32 { internal new enum Property : ushort { DNSHostName, Domain, DomainRole, Manufacturer, Model, Name, NameFormat, Status, SystemType, TotalPhysicalMemory, UserName } internal new enum SpecialByte : ushort { TotalPhysicalMemory } internal new enum SpecialKiloByte : ushort {
} private enum DomainRole { Standalone_Workstation, Member_Workstation, Standalone_Server, Member_Server, Backup_Domain_Controller, Primary_Domain_Controller } }
...
// Hosting.cOSInfoWMI.IWin32 public virtual void Print(cOSInfoWMI.IWin32.PrintDelegate Print) { Print("\n"); Print(base.GetType().get_Name()); string text = this.GetDynamicTypeName() + "+" + typeof(cOSInfoWMI.IWin32.Property).get_Name(); Type type = Type.GetType(text); string[] names = Enum.GetNames(type); ArrayList wMI = this.GetWMI(); for (int i = 0; i < wMI.get_Count(); i++) { PropertyData propertyData = (PropertyData)wMI.get_Item(i); if (i != 0 && names[0] == propertyData.get_Name()) { Print("\n"); } if (propertyData != null) { Print(string.Format(" {0}\t\t\t{1,-25}", propertyData.get_Name(), this.InterpreterValueToMeaning(propertyData.get_Name(), propertyData.get_Value()))); } } } --- snip ---
Some CIM data type to OLE variant (VT) mappings are incorrect.
These need to be fixed with explicit variant override to have the launcher successfully run:
'Win32_ComputerSystem':
DomainRole -> CIM_UINT16, VT_I4
'Win32_NetworkAdapterConfiguration':
Index -> CIM_UINT32|COL_FLAG_KEY, VT_I4 IPConnectionMetric -> CIM_UINT32, VT_I4
'Win32_VideoController_:
CurrentBitsPerPixel -> CIM_UINT32, VT_I4 CurrentHorizontalResolution -> CIM_UINT32, VT_I4 CurrentVerticalResolution -> CIM_UINT32, VT_I4
There are probably more incorrect type mapping present but the above properties are strictly required to be fixed.
$ sha1sum GamersFirst_LIVE!_Setup_EN.exe 904bd380bba06cc32288646fddd5e4b9287ca71b GamersFirst_LIVE!_Setup_EN.exe
$ du -sh GamersFirst_LIVE!_Setup_EN.exe 13M GamersFirst_LIVE!_Setup_EN.exe
$ wine --version wine-1.7.23-15-gbe2128f
Regards