[svn.haxx.se] · SVN Dev · SVN Users · SVN Org · TSVN Dev · TSVN Users · Subclipse Dev · Subclipse Users · this month's index

Re: TortoiseOverlay merge module questions

From: Adrian Buehlmann <adrian_at_cadifra.com>
Date: Fri, 26 Feb 2010 10:54:58 +0100

On 09.02.2010 09:20, Stefan Küng wrote:
> On Tue, Feb 9, 2010 at 06:02, Steve Borho <steve_at_borho.org> wrote:
>> Hello,
>>
>> I'm the project lead of TortoiseHg. We're transitioning our project
>> to use WIX and thus switching from bundling your excellent
>> TortoiseOverlay MSI packages to using the provided merge modules
>> instead. This leads to a couple of issues I'm hoping you can help me
>> out with.
>>
>> First, our x64 MSI package installs our 32 bit applications and both
>> the x86 and x64 shell extensions. This seems to mostly work, except
>> light generates a validation error during the link step. Even though
>> light generates this error message and returns an error code, it still
>> generates a functional MSI.
>
> Sorry, I seriously doubt that. Msi does not allow 32 and 64-bit
> components in the same msi file (version 5 will have that ability,
> although somewhat limited - but version 5 most likely won't run on
> XP).
>
> Also, what you call a "functional msi" might work on your system with
> your specific version of the windows installer. Someone using another
> version of the windows installer might get another result or the
> installation won't work at all.

We will ship exactly that in TortoiseHg 1.0, in a couple of days
(an msi having both 32 and 64 bit components).

But of course without the TortoiseOverlays x86 in our x64 installer, due to
the component GUID conflict. We will request our users to download and install
TortoiseOveralys x86 themselves for x64 platforms if they want to have
overlay icons in 32 bit processes (tested, works fine, but of course is
clumsy), citing the GUID conflict.

I admit I haven't tested yet on Win XP x64 but on clean Vista x64 SP2 and
Windows 7 x64 all this works fine.

Per my own cluelessness, it is hard to understand that two packages can't be
installed in a single installer, but they work fine once installed, if a user
installs these separate packages manually, one after the other.

Our minimum required platform will be Win XP and our focus for x64 platforms
is clearly Vista and Windows 7. I might as well consider having the x64 installer
refusing to install TortoiseHg 1.0 on Win XP x64 if it turns out to be problem on
that platform.

For those interested: 1.0 betas for testing are available on
http://bitbucket.org/tortoisehg/thg-winbuild/downloads/
(take a tortoisehg-stable-*.msi)

>> light.exe : error LGHT0204 : ICE08: Component:
>> OverlayRegistry.3C89127D_F335_46EB_8720_CAFE0C0FEB7E has a duplicate
>> GUID: {87654321-4321-4321-4321-110987654321}
>
> That's why it won't work to combine x64 and win32 packages in one msi.
> Ok, it's actually a little bit more complicated...
>
>> Digging through the TortoiseOverlay source, I can see that both the
>> TortoiseOverlaysDir,wxi and TortoiseOverlaysDirx64.wxi define this
>> component and GUID. Is this something that could be easily resolved
>> on your side?
>
> Nope.
>
> A 32-bit msi can only register components in the 32-bit registry hive.
> A 64-bit msi can only register components in the 64-bit registry hive.
> You can try to manually specify the redirect path to the 32-bit
> registry, but this will break the automatic update/upgrade checks msi
> does when installing a component.
>
>> The second issue is a simpler question: We've shipped three different
>> versions of TortoiseOverlay*.msi since the project adopted your
>> overlay shims about 18 months ago. When we finally release our new
>> MSI packages, we're going to ask (well, actually force) that users
>> uninstall their previous TortoiseHg packages to avoid having to
>> upgrade the old InnoSetup based installs. What do we tell users about
>> these (potentially several) TortoiseOverlay packages that are left on
>> their machines? Should they be left installed unconditionally? Is
>> there a way to tell when they can be safely removed?
>
> It's an msi - uninstalling is always possible because msi keeps track
> on how many times it was installed and when it can be safely removed.

I still don't see why the exact same component GUID must be used twice
in two different products (one being an x86 and the other a x64).

Can you explain why it is not possible to have *different* GUIDs?

Stupid question (as often): Why not doing something like:

diff -r c09eee583297 -r 3a985a351248 src/TortoiseOverlays/TortoiseOverlaysDir.wxi
--- a/src/TortoiseOverlays/TortoiseOverlaysDir.wxi Sat Jan 30 18:11:16 2010 +0000
+++ b/src/TortoiseOverlays/TortoiseOverlaysDir.wxi Tue Feb 09 20:39:34 2010 +0100
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <Include Id="TsvnInclude">
- <Component Id='OverlayRegistry' Guid='87654321-4321-4321-4321-110987654321' Win64="$(var.Win64YesNo)">
+ <Component Id='OverlayRegistry' Guid='C3A72ADD-8C97-4E5F-817E-D3F01A1A5EB8' Win64="$(var.Win64YesNo)">
                 <RegistryKey Root="HKMU" Key="Software\Classes\CLSID\{$(var.GuidNormal)}" Action="createAndRemoveOnUninstall" />
                 <RegistryValue Root="HKMU" Key="Software\Classes\CLSID\{$(var.GuidNormal)}\InProcServer32" Value="[CommonFilesFolder]TortoiseOverlays\TortoiseOverlays.dll" Type="string" />
                 <RegistryValue Root="HKMU" Key="Software\Classes\CLSID\{$(var.GuidNormal)}\InProcServer32" Name="ThreadingModel" Value="Apartment" Type="string" />
diff -r c09eee583297 -r 3a985a351248 src/TortoiseOverlays/TortoiseOverlaysDirx64.wxi
--- a/src/TortoiseOverlays/TortoiseOverlaysDirx64.wxi Sat Jan 30 18:11:16 2010 +0000
+++ b/src/TortoiseOverlays/TortoiseOverlaysDirx64.wxi Tue Feb 09 20:39:34 2010 +0100
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <Include Id="TsvnInclude">
- <Component Id='OverlayRegistry' Guid='87654321-4321-4321-4321-110987654321' Win64="$(var.Win64YesNo)">
+ <Component Id='OverlayRegistry' Guid='40AC42A2-C8DF-47C8-9B42-23B2312C65EA' Win64="$(var.Win64YesNo)">
                 <RegistryKey Root="HKMU" Key="Software\Classes\CLSID\{$(var.GuidNormal)}" Action="createAndRemoveOnUninstall" />
                 <RegistryValue Root="HKMU" Key="Software\Classes\CLSID\{$(var.GuidNormal)}\InProcServer32" Value="[CommonFiles64Folder]TortoiseOverlays\TortoiseOverlays.dll" Type="string" />
                 <RegistryValue Root="HKMU" Key="Software\Classes\CLSID\{$(var.GuidNormal)}\InProcServer32" Name="ThreadingModel" Value="Apartment" Type="string" />

------------------------------------------------------
http://tortoisesvn.tigris.org/ds/viewMessage.do?dsForumId=757&dsMessageId=2452465

To unsubscribe from this discussion, e-mail: [dev-unsubscribe_at_tortoisesvn.tigris.org].

Received on 2010-02-26 11:39:24 CET

This is an archived mail posted to the TortoiseSVN Dev mailing list.

This site is subject to the Apache Privacy Policy and the Apache Public Forum Archive Policy.