http://bugs.winehq.org/show_bug.cgi?id=16956
--- Comment #43 from Anastasius Focht focht@gmx.net 2011-07-03 05:42:36 CDT --- Hello,
I've seen this phenomenon sometimes - I suspect some kind of race condition when committing changes to registry/hives after doing full bootstrap.
You execute 'wineserver -k' as prerequisite hence the first process start will bootstrap everything again (reg/regedit). Now it seems even after reg/regedit termination, the system.reg registry hive still has "Windows XP" at the point when the main .NET SP installer is started (-> wineserver doesn't terminate in between). After some time - while already running SP installer - the hive gets the change to "Windows 2000" (-> regedit import terminated long ago). Hence the main installer is started with "Windows XP" while subsequent processes get "Windows 2000" (registry changes got committed at much later time). Sometimes you get a more concise indication of the problem in terminal:
--- snip --- fixme:ntdll:server_ioctl_file Unsupported ioctl 900a4 (device=9 access=0 func=29 method=0) --- snip ---
This is where the directory links are used for assembly GAC install (reparse point/junctions) and a clear indication that the WINEPREFIX still operates on Winver "Windows XP".
---
When you do full bootstrap sequence (to kill off services and lingering processes):
--- snip --- ... wineserver -k w_set_winver win2k --- snip ---
You must force full bootstrap again after 'w_set_winver win2k':
wineserver -k
or add sufficient large delay (sleep 5) to have wineserver/initial processes terminate gracefully again - before starting the installer. The "safe" variant is of course 'wineserver -k'
BTW: you also need to handle installer internal exit code 194 after successful install (the user selected "restart later"). The .cab check stands corrected too.
Regards