[Bug 35218] Leviathan: Warships (Steam) hangs after selecting single player mode (needs support for shell32 FOLDERID_LocalAppDataLow)

wine-bugs at winehq.org wine-bugs at winehq.org
Tue Dec 24 03:17:56 CST 2013


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

Anastasius Focht <focht at gmx.net> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
           Keywords|                            |download
                URL|                            |http://store.steampowered.c
                   |                            |om/app/202270/
                 CC|                            |focht at gmx.net
          Component|-unknown                    |shell32
            Summary|Leviathan: Warships hangs   |Leviathan: Warships (Steam)
                   |after selecting single      |hangs after selecting
                   |player mode                 |single player mode (needs
                   |                            |support for shell32
                   |                            |FOLDERID_LocalAppDataLow)

--- Comment #2 from Anastasius Focht <focht at gmx.net> ---
Hello folks,

confirming.

--- snip ---
ArgumentException: The Path does not have a valid format
  at System.IO.Directory.GetFileSystemEntries (System.String path,
System.String searchPattern, FileAttributes mask, FileAttributes attrs)
[0x00000] in <filename unknown>:0 
  at System.IO.Directory.GetFiles (System.String path, System.String
searchPattern) [0x00000] in <filename unknown>:0 
  at System.IO.Directory.GetFiles (System.String path) [0x00000] in <filename
unknown>:0 
  at OfflineGameDB.GetGameList () [0x00000] in <filename unknown>:0 
  at OfflineMenu.FillGameList () [0x00000] in <filename unknown>:0 
...
--- snip ---

Using the managed backtrace I found the code in the managed assembly
'Assembly-CSharp.dll':

--- snip ---
// OfflineGameDB
public List<GamePost> GetGameList()
{
   List<GamePost> list = new List<GamePost>();
   string[] files = Directory.GetFiles(Application.persistentDataPath);
   string[] array = files;
   for (int i = 0; i < array.Length; i++)
   {
      string text = array[i];
      if (Path.GetExtension(text) == ".gam")
      {
          GamePost item = this.LoadGamePost(text);
          list.Add(item);
      }
   }
   return list;
}
--- snip ---

The problem is unity3d engine 'Application.persistantDataPath' property which
is used here for load/save game data base path.

Info:
http://docs.unity3d.com/Documentation/ScriptReference/Application-persistentDataPath.html

The property value is initialized at the start of managed engine and used later
in various places:

--- snip ---
$ wine ./steam.exe -applaunch 202270
...
0031:Call KERNEL32.LoadLibraryA(00b3a0f4 "shell32.dll") ret=005ea613
0031:Ret  KERNEL32.LoadLibraryA() retval=7e890000 ret=005ea613
0031:Call KERNEL32.GetProcAddress(7e890000,00b3a0dc "SHGetKnownFolderPath")
ret=005ea625
0031:Ret  KERNEL32.GetProcAddress() retval=7e893df4 ret=005ea625
0031:Call shell32.SHGetKnownFolderPath(00b3a000,00000000,00000000,0033daa4)
ret=005ea636
...
0031:Call shlwapi.PathAddBackslashW(0033d318 L"%USERPROFILE%") ret=7e8df424
0031:Ret  shlwapi.PathAddBackslashW() retval=0033d334 ret=7e8df424
0031:Call advapi32.RegCreateKeyExW(80000002,7e92bf00
L"Software\\Microsoft\\Windows
NT\\CurrentVersion\\ProfileList",00000000,00000000,00000000,000f003f,00000000,0033ce90,0033cc48)
ret=7e8dfd35
0031:Ret  advapi32.RegCreateKeyExW() retval=00000000 ret=7e8dfd35
0031:Call KERNEL32.GetSystemDirectoryW(0033cc84,00000104) ret=7e8e00b3
0031:Ret  KERNEL32.GetSystemDirectoryW() retval=00000013 ret=7e8e00b3
0031:Call advapi32.RegQueryValueExW(00000308,7e92bf80
L"ProfilesDirectory",00000000,0033cc2c,0033ce94,0033cc28) ret=7e8dfe0b
0031:Ret  advapi32.RegQueryValueExW() retval=00000000 ret=7e8dfe0b
0031:Call advapi32.GetUserNameW(0033cc84,0033ce8c) ret=7e8e02a1
0031:Ret  advapi32.GetUserNameW() retval=00000001 ret=7e8e02a1
0031:Call shlwapi.PathAppendW(0033d520 L"C:\\users",0033cc84 L"focht")
ret=7e8e02b9
0031:Ret  shlwapi.PathAppendW() retval=00000001 ret=7e8e02b9
0031:Call shlwapi.PathAppendW(0033d520 L"C:\\users\\focht",0033d0b6
L"\\AppData\\LocalLow") ret=7e8e02e4
0031:Ret  shlwapi.PathAppendW() retval=00000001 ret=7e8e02e4
0031:Call advapi32.RegCloseKey(00000308) ret=7e8e0490
0031:Ret  advapi32.RegCloseKey() retval=00000000 ret=7e8e0490
0031:Call shlwapi.PathFileExistsW(0033d520
L"C:\\users\\focht\\AppData\\LocalLow") ret=7e8e0d9d
0031:Call KERNEL32.SetErrorMode(00000001) ret=7e82ee3f
0031:Ret  KERNEL32.SetErrorMode() retval=00008001 ret=7e82ee3f
0031:Call KERNEL32.GetFileAttributesW(0033d520
L"C:\\users\\focht\\AppData\\LocalLow") ret=7e82ee4f
0031:Ret  KERNEL32.GetFileAttributesW() retval=ffffffff ret=7e82ee4f
0031:Call KERNEL32.SetErrorMode(00008001) ret=7e82ee60
0031:Ret  KERNEL32.SetErrorMode() retval=00000001 ret=7e82ee60
0031:Ret  shlwapi.PathFileExistsW() retval=00000000 ret=7e8e0d9d
0031:Ret  shell32.SHGetKnownFolderPath() retval=80070002 ret=005ea636
0031:Call KERNEL32.FreeLibrary(7e890000) ret=005ea63f
0031:Ret  KERNEL32.FreeLibrary() retval=00000001 ret=005ea63f 
...
<lots of unrelated traces>
...
0031:Call KERNEL32.GetFileAttributesW(0cc46714 L"/user.dat") ret=10029fb7
0031:Ret  KERNEL32.GetFileAttributesW() retval=ffffffff ret=10029fb7
0031:Call KERNEL32.GetLastError() ret=10029fc2
0031:Ret  KERNEL32.GetLastError() retval=00000002 ret=10029fc2 
...
0031:trace:seh:raise_exception code=c0000005 flags=0 addr=0x54b5ba1 ip=054b5ba1
tid=0031
0031:trace:seh:raise_exception  info[0]=00000000
0031:trace:seh:raise_exception  info[1]=0000000c
0031:trace:seh:raise_exception  eax=00000000 ebx=0ca127e0 ecx=0cc61d70
edx=0be10494 esi=0570ecc0 edi=0ca127e0
0031:trace:seh:raise_exception  ebp=0033dbf8 esp=0033dbe0 cs=0023 ds=002b
es=002b fs=0063 gs=006b flags=00010206
0031:trace:seh:call_stack_handlers calling handler at 0x971ac0 code=c0000005
flags=0 
--- snip ---

-> FOLDERID_LocalAppDataLow

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

Default Path: '%USERPROFILE%\AppData\LocalLow'

If you create that folder the game runs fine.

... and it's a dupe of bug 22896 (I'll refine that summary because many games
suffer from this bug, google appdb).

$ wine --version
wine-1.7.9-158-g33fa552

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