[Bug 37001] New: APB Reloaded 1.x (MMORPG) launcher crashes on startup (some CIM data type to OLE variant (VT) mappings are incorrect)

wine-bugs at winehq.org wine-bugs at winehq.org
Wed Jul 30 15:32:10 CDT 2014


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 at winehq.org
          Reporter: focht at 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

-- 
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