http://bugs.winehq.org/show_bug.cgi?id=35218
Anastasius Focht focht@gmx.net changed:
What |Removed |Added ---------------------------------------------------------------------------- Keywords| |download URL| |http://store.steampowered.c | |om/app/202270/ CC| |focht@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@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-persistent...
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%2...
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