http://bugs.winehq.org/show_bug.cgi?id=18614
--- Comment #26 from rmaz@gmx.net 2011-04-21 08:32:58 CDT --- (In reply to comment #24)
;; This should be run through setupapi: ;; rundll32 setupapi.dll,InstallHinfSection DefaultInstall 128 wine.inf
I could maybe try to do this manually, but I don't seem to have a rundll32 executable, only a rundll32.exe.so in /usr/local/lib/wine.
Run it as you would do with any other Wine built-in application: wine rundll32 setupapi.dll,InstallHinfSection DefaultInstall 128 wine.inf
Hm, that seems to bring us back to the orginal issue:
$ rm -rf .wine; wine rundll32 setupapi.dll,InstallHinfSection DefaultInstall 128 wine.inf wine: created the configuration directory '/home/maz/.wine' err:rundll32:wWinMain Unable to load L"setupapi" wine: configuration in '/home/maz/.wine' has been updated. err:rundll32:wWinMain Unable to load L"setupapi.dll"
I'd guess that the reason wine.inf doesn't show up in the log is then that, since it fails to load this setupapi dll, it never gets to parse the later arguments. I'm guessing what the above command tries to do is dynload the specified library (setupapi.dll.so) and execute the function specified after the comma (InstallHinfSection) with the rest of the line passed as arguments to the function, yes?
I think I found the relevant section in programs/rundll32/rundll32.c:
/* Get the dll name and API EntryPoint */ WINE_TRACE("CmdLine=%s\n",wine_dbgstr_w(szCmdLine)); szDllName = get_next_arg(&szCmdLine); if (!szDllName || *szDllName==0) goto CLEANUP; WINE_TRACE("DllName=%s\n",wine_dbgstr_w(szDllName)); if ((szEntryPoint = strchrW(szDllName, ',' ))) *szEntryPoint++=0; else szEntryPoint = get_next_arg(&szCmdLine); WINE_TRACE("EntryPoint=%s\n",wine_dbgstr_w(szEntryPoint));
/* Load the library */ hDll=LoadLibraryW(szDllName); if (hDll) { win16 = FALSE; entry_point = get_entry_point32( hDll, szEntryPoint, &unicode ); } else { HINSTANCE16 dll = load_dll16( szDllName ); if (dll <= 32) { /* Windows has a MessageBox here... */ --> WINE_ERR("Unable to load %s\n",wine_dbgstr_w(szDllName)); <-- goto CLEANUP; } win16 = TRUE; unicode = FALSE; entry_point = get_entry_point16( dll, szEntryPoint ); }
Looks like it should write CmdLine, DllName, EntryPoint to the log before trying to open, but I don't see such lines in my wineboot.log. Which WINEDEBUG options do I need to get them? Is it the LoadLibraryW or the load_dll16 that does not produce the expected result?