[Bug 6194] BITS Service fails to install

Wine Bugs wine-bugs at winehq.org
Mon May 14 04:11:52 CDT 2007


http://bugs.winehq.org/show_bug.cgi?id=6194





------- Additional Comments From focht at gmx.net  2007-14-05 04:11 -------
Hello,

--- quote ---
Anastasius, I'm not trying to work around using the installer to get the service
running.  I'm trying to find the exact steps and workarounds needed to make the
installer complete successfully.
--- quote ---

Ok, i was under impression someone wanted to get that BITS stuff running :)

Technically, this installer (.exe) is a self extracting cab (sfx).
One can verify this with "cabextract" or any other .cab tool.
After extraction you have "_sfx_manifest_", "_sfx_.dll" and "*._p" files.
The manifest is just an ini file which describes the actions to be taken by
differential patcher.
"_sfx_.dll" is mspatcha.dll (Microsoft patching API).
"*._p" are just files in Windows Installer 3.x differential patch format
(Microsoft, magic "PA19")

Some time ago, i wrote a little tool which parses the patcher manifest, loads
the M$ patch API dll and calls it with necessary info to extract all patches.
Afterwards the sub-installer "./update/update.exe" is run to carry out the real
update (described in .inf file).

Ok, this was a bit off-topic :-)
Your steps can be simplified.

--- quote ---
1) rename .wine/drive_c -> .wine/harddiskvolume1 and fixup dosdevices
--- quote ---

Too intrusive.
For installation a better way is to use two temporary symlinks
This doesnt affect/break other wine stuff while installing.

  cd "$WINEPREFIX"
  ln -s "drive_c" "harddisk"
  cd "$WINEPREFIX/dosdevices"
  ln -s "../harddisk" "$DRIVE" 

The installer just scans drives a: .. z: for dos device name containing
"harddisk" substring.
Take an unused drive letter and symlink it, effectively pointing to drive_c
after both symlinks are resolved.
After installation both symlinks can be easily removed (by script).

--- quote ---
2) copy c:\windows\system32\CatRoot* from Windows to Wine
--- quote ---

No need for any windows stuff to be copied.
Just fake the windows components catalog directory:

mkdir -p
"$WINEPREFIX/drive_c/windows/system32/CatRoot/{F750E6C3-38EE-11D1-85E5-00C04FC295EE}"

and put at least a fake *.cat file into it (can be empty, doesnt have to be a
valid one).

echo >
"$WINEPREFIX/drive_c/windows/system32/CatRoot/{F750E6C3-38EE-11D1-85E5-00C04FC295EE}/oem0.cat"


--- quote ---
3) Set version to Win XP in winecfg
4) Open regedit and change
HKLM\Systems\CurrentControlSet\Control\Windows\CSDVersion from 0x200 to 0x100
--- quote ---

Ok, can be done by script too (like winetricks).

--- quote ---
5) Copy native hal.dll, schannel.dll, shdocvw.dll to system32
--- quote ---

No need for windows components.
The installer checks for "$WINEPREFIX/drive_c/windows/system32/hal.dll" version
resource.
Any valid PE with version resource (even wines placeholder ones) will do.

   cp "$WINEPREFIX/drive_c/windows/system32/kernel32.dll"
"$WINEPREFIX/drive_c/windows/system32/hal.dll" 

(after installation fake hal.dll can be removed).

With these steps, the real update-installer is finally started (though it comes
with error after you agree to EULA).

Dealing with the real installer will be part of my next post.

Regards

-- 
Configure bugmail: http://bugs.winehq.org/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are on the CC list for the bug, or are watching someone who is.



More information about the wine-bugs mailing list