[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