Jump to content


This is a ready-only archive of the InstallSite Forum. You cannot post any new content here. / Dies ist ein Archiv des InstallSite Forums. Hier können keine neuen Beiträge veröffentlicht werden.
Photo

how to switch off WIN64DUALFOLDERS Substitution


Best Answer pwsimon , 15 November 2013 - 11:22

after a hint from Andreas Kerl (certified Microsoft specialist) i tested my packages on a Windows 8 machine and surprisingly that work properly.

For Windows7 machines i popup a Dialog which requests a manual uninstall.

Go to the full post


5 replies to this topic

pwsimon

pwsimon
  • Full Members
  • 3 posts

Posted 12 November 2013 - 13:37

i have two Setup Projects for my product.

first a pure x64 package which contains only x64 components. the default location for this package is "ProgramFiles64Folder"

the second one is a pure x86 package which contains only x86 components. the default location for this package is "ProgramFilesFolder"

(Unfortunately my product could not run two instances simultaneously. Not with the same bitness nor different bitness)

therefore both packages are using the same UpgradeCode to achieve that the last installation removes the previous version.

this works very well. The x64 Setup Project detect a previous installation of the x86. The x86 package will be correctly uninstalled and removed.

BUT if i try to install the x86 package while a x64 Package is currently installed the files will not removed.

i found that in this scenario WIN64DUALFOLDERS patch the path of my installed product from <ProgramFiles64Folder> to <ProgramFilesFolder>.

so the RemoveFiles Action points to the wrong directory???

My question: could this be a side effect of the WIN64DUALFOLDERS feature/behavior???

EVIDENCE: i installed the x64 Product into a custom folder, a direct child of the root folder, e.g. c:\Productx64.

After the installation of the x86 Product the x64 Product is complete installed and the files removed.

All is fine because there are no more substitutions from WIN64DUALFOLDERS in my Log File.

My questions:

- is there a way to switch this feature/behavior on/off??

- can anybody show me a case where this feature/behavior is use full???

 

thanks in advance

--------------------------------------------------------------------------

 

Ich habe zwei, native, installer projecte für mein Produkt. Eine x86 und eine x64 Variante.

Mit "nativ" meine ich durchgehend konsistent und kein hybrid. Das x64 Paket ist also wirklich ein x64 Paket mit ausschliesslich x64 Komponenten.

Die x64 Variante wird deshalb konsequent auch in den "ProgramFiles64Folder" installiert und die x86 Variante den "ProgramFilesFolder".

Unglücklicherweise kann mein Produkt nicht in mehreren Instanzen gleichzeitig laufen (auch nicht wenn es in einer x86 und x64 variante vorliegt).

Deshalb habe ich beiden Produkten den gleichen UpgradeCode gegeben so das mit der installation eine evtl. vorhandene deinstalliert wird.

 

In der Praxis passiert folgendes:

Beim Installieren der x64 Version bei vorhandener x86 wird diese vollständig und korrekt deinstalliert.

Das System enthält ein funktionsfähiges und korrekt installiertes x64 Produkt.

Beim Installieren der x86 Version bei vorhandener x64 wird diese korrekt deinstalliert (RemoveRegistryValues, Remove...).

ABER die Dateien werden NICHT entfernt.

 

Analyse der Logfiles:

Es wird durch "FindRelatedProducts" korrekt ermittelt das bereits eine x64 Version installiert ist und zwar unter "ProgramFiles64Folder".

Bevor jedoch die RemoveFilesAction zum zug kommt wird das INSTALLDIR durch WIN64DUALFOLDERS gepatcht und zwar auf "ProgramFilesFolder".

Jetzt versucht die RemoveFilesAction Dateien zu löschen die es nicht gibt???

 

Fragen:

Kann man das Verhalten WIN64DUALFOLDERS irgendwie ein/aus-schalten???

Vieleicht kann jemand den Sinn und Zweck dieses Verhaltens erklären und dann daraus eine Strategie ableiten wie man sich das zu nutze macht???

 

Dank für einen Tip

 



Stefan Krueger

Stefan Krueger

    InstallSite.org

  • Administrators
  • 13,269 posts

Posted 14 November 2013 - 12:28

Are the RemoveFiles entries that aren't working properly in the x64 or in the x86 version?



pwsimon

pwsimon
  • Full Members
  • 3 posts

Posted 14 November 2013 - 15:05

what i have done in chronological order.

i installed the x64 version of my product from an x64 commandline prompt like:

msiexec /quiet /i TheProduct_x64.msi /l*v TheProduct_x64.log

after that "TheProduct" is installed at "C:\Program Files\UninstallDir" (the correct default location)

 

now i started the installation of the x86 version from an x64 commandline prompt like:

msiexec /quiet /i TheProduct.msi /l*v TheProduct.log

 

now i show you some lines of the resulting TheProduct.log (the original line is prefixed with braces. and my comment with double slash)

(1) === Verbose logging started: 14.11.2013 13:39:47 Build type: SHIP UNICODE 5.00.7601.00 Calling process: C:\Windows\system32\msiexec.exe ===

(132) MSI (s) (8C:C0) [13:39:47:858]: Doing action: FindRelatedProducts

(134) Action start 13:39:47: FindRelatedProducts.

// the x64 version of my product is found. the ProductCode is correct

(135) MSI (s) (8C:C0) [13:39:47:859]: PROPERTY CHANGE: Adding UPGRADE_1 property. Its value is '{9CEC70FA-64DD-4B0A-94C4-7F30A3201289}'.

// after installation of the x86 version the RemoveExistingProducts starts

(637) Action start 13:39:48: RemoveExistingProducts.

(640) MSI (s) (8C:18) [13:39:48:539]: ******* RunEngine:

// the ProductCode is correct

(641) ******* Product: {9CEC70FA-64DD-4B0A-94C4-7F30A3201289}

// the package is the windows copy

(647) MSI (s) (8C:18) [13:39:48:541]: Package we're running from ==> C:\Windows\Installer\b33eced.msi

// the INSTALLDIR points to location where the x64 product is currently installed

// so about your question: i think this trace belongs to version being uninstalled (the x64 version)

(787) MSI (s) (8C:18) [13:39:48:578]: PROPERTY CHANGE: Adding INSTALLDIR property. Its value is 'C:\Program Files\UninstallDir'.

// i guess thats the problem, the path is patched

(794) MSI (s) (8C:18) [13:39:48:579]: PROPERTY CHANGE: Modifying INSTALLDIR property. Its current value is 'C:\Program Files\UninstallDir'. Its new value: 'C:\Program Files (x86)\UninstallDir\'.

(1165) MSI (s) (8C:18) [13:39:49:965]: Executing op: ActionStart(Name=RemoveFiles,Description=Removing files...,Template=File: [1]

// now it points to the wrong directory

(1168) MSI (s) (8C:18) [13:39:49:966]: Executing op: SetTargetFolder(Folder=C:\Program Files (x86)\UninstallDir\)

(1169) MSI (s) (8C:18) [13:39:49:966]: Executing op: FileRemove(,FileName=communicator.exe,,ComponentId={8C0C0163-E6B2-4272-975E-66B0C1237902})

 

// the original (unmodified) log is available at

<http://support.estos...lSiteForum.zip>

Download gültig bis 28.11.2013 / Download link expires 28.11.2013

thanks in advandce



Stefan Krueger

Stefan Krueger

    InstallSite.org

  • Administrators
  • 13,269 posts

Posted 15 November 2013 - 10:32

 

// so about your question: i think this trace belongs to version being uninstalled (the x64 version)

I agree.

I'm not sure but it may simply be impossible for a 32 bit installer to remove a 64 bit package.



pwsimon

pwsimon
  • Full Members
  • 3 posts

Posted 15 November 2013 - 11:22   Best Answer

after a hint from Andreas Kerl (certified Microsoft specialist) i tested my packages on a Windows 8 machine and surprisingly that work properly.

For Windows7 machines i popup a Dialog which requests a manual uninstall.


Edited by pwsimon, 15 November 2013 - 11:27.


Stefan Krueger

Stefan Krueger

    InstallSite.org

  • Administrators
  • 13,269 posts

Posted 18 November 2013 - 19:15

Tricky. Is this documented officially somewhere?