Pipe names are currently case sensitive. This affects instmsiw.exe since the service is created as "MSIService" and connected to as "MsiService". The result is that instmsiw.exe always fails to query the service status.
I have insmsiw.exe from Office 2K working (at least to get as far as installing Microsoft's version of MSI) with the patches I just sent through to wine-patches, plus the hack below (which will also fix the problem for other IPC objects).
One alternative to this hack would appear to be to make sync_namespace case insensitive in wineserver, although I am not sure if that is the correct approach. It seems to me that sync_namespace must have been chosen as case sensitive for a reason, although a grep doesn't reveal anything that should obviously be case sensitive in that namespace.
A third alternative would be to have find_object and create_object take a flag that forces case insensitivity even in a case sensitive namespace.
Which approach is to be preferred here?
Index: ntdll/path.c =================================================================== RCS file: /home/wine/wine/dlls/ntdll/path.c,v retrieving revision 1.28 diff -u -r1.28 path.c --- ntdll/path.c 13 Aug 2004 23:53:44 -0000 1.28 +++ ntdll/path.c 19 Apr 2005 05:34:20 -0000 @@ -360,6 +360,16 @@ break; }
+ /* This is an ugly hack that will never make it into WINE */ + if (offset == 4) + { + WCHAR *src = ptr + offset; + WCHAR *dst = ntpath->Buffer + strlenW(ntpath->Buffer); + + while (*src) + *dst++ = RtlUpcaseUnicodeChar(*src++); + *dst = 0; + } else strcatW(ntpath->Buffer, ptr + offset); ntpath->Length = strlenW(ntpath->Buffer) * sizeof(WCHAR);