http://bugs.winehq.org/show_bug.cgi?id=26925
Anastasius Focht focht@gmx.net changed:
What |Removed |Added ---------------------------------------------------------------------------- Keywords| |download, Installer CC| |focht@gmx.net Component|-unknown |msi
--- Comment #2 from Anastasius Focht focht@gmx.net 2011-04-25 11:40:11 CDT --- Hello,
it seems some target folders/properties (resolved by costing) are not recalculated during processing of InstallExecuteSequence table when previous run of InstallUISequence already set them.
1. InstallUISequence -> costing -> resolves folders to default values 2. InstallExecuteSequence -> costing -> uses already resolved folders/properties if present
The problem is there is a custom action run in InstallExecuteSequence before costing that (re)sets property (parent folder) for other costing related properties. This change is not taken into account, leaving folders resolved to their initial values.
I downloaded the demo and extracted relevant part of trace log.
InstallUISequence -> first costing run:
--- snip --- ... 002f:trace:msi:ITERATE_CostFinalizeDirectories directory L"WixPlayTask0_Application" ... 002f:trace:msi:resolve_target_folder working to resolve L"WixPlayTask0_Application" ... 002f:trace:msi:msi_get_property property L"WixPlayTask0_Application" not found 002f:trace:msi:resolve_target_folder ! parent is L"WixPlayTasksRoot_Application" 002f:trace:msi:resolve_target_folder working to resolve L"WixPlayTasksRoot_Application" 002f:trace:msi:resolve_target_folder already resolved to L"C:\" 002f:trace:msi:resolve_target_folder TargetDefault = L"0" 002f:trace:msi:resolve_target_folder -> L"C:\0\" 002f:trace:msi:msi_set_property 0x131248 L"WixPlayTask0_Application" L"C:\0\" ... --- snip ---
The custom action that changes the parent folder:
--- snip --- 002f:trace:msi:ACTION_PerformUIAction Performing action (L"WixPlayTasksRoot_Application") ... 002f:trace:msi:ACTION_CustomAction Handling custom action L"WixPlayTasksRoot_Application" (33 L"WixPlayTasksRoot_Application" L"[CommonAppDataFolder]Microsoft\Windows\GameExplorer\{BB112F90-7C81-4352-8823-861D3957CF8A}\PlayTasks\") ... --- snip ---
InstallExecuteSequence -> second costing run:
--- snip --- 002f:trace:msi:ITERATE_CostFinalizeDirectories directory L"WixPlayTasksRoot_Application" ... 002f:trace:msi:resolve_target_folder working to resolve L"WixPlayTasksRoot_Application" ... 002f:trace:msi:msi_get_property returning L"C:\users\Public\Application Data\Microsoft\Windows\GameExplorer\{BB112F90-7C81-4352-8823-861D3957CF8A}\PlayTasks\" for property L"WixPlayTasksRoot_Application" 002f:trace:msi:resolve_target_folder property set to L"C:\users\Public\Application Data\Microsoft\Windows\GameExplorer\{BB112F90-7C81-4352-8823-861D3957CF8A}\PlayTasks\" 002f:trace:msi:ITERATE_CostFinalizeDirectories resolves to L"C:\users\Public\Application Data\Microsoft\Windows\GameExplorer\{BB112F90-7C81-4352-8823-861D3957CF8A}\PlayTasks\" ... 002f:trace:msi:ITERATE_CostFinalizeDirectories directory L"WixPlayTask0_Application" ... 002f:trace:msi:resolve_target_folder working to resolve L"WixPlayTask0_Application" ... 002f:trace:msi:msi_get_property returning L"C:\0\" for property L"WixPlayTask0_Application" 002f:trace:msi:resolve_target_folder property set to L"C:\0\" 002f:trace:msi:ITERATE_CostFinalizeDirectories resolves to L"C:\0\" ... 002f:trace:msi:MSI_ProcessMessage (nil) (nil) (nil) 0 200 L"Shortcut: WixPlayTask0_Application" 002f:trace:msi:ControlEvent_FireSubscribedEvent Firing Event L"ActionData" 002f:trace:msi:msiobj_release object 0x1227680 destroyed 002f:trace:msi:MSI_FormatRecordW 0x1481a8 0x12277f0 (nil) 0x32f7c8 002f:trace:msi:MSI_FormatRecordW (L"[#Dungeons.exe]") 002f:trace:msi:MSI_FormatRecordW 0x1481a8 0x12277f0 0x1227df0 0x32f7c8 002f:trace:msi:MSI_FormatRecordW (L"[#Dungeons.exe]") 002f:trace:msi:msiobj_release object 0x12277f0 destroyed 002f:trace:msi:resolve_target_folder working to resolve L"APPLICATIONFOLDER" 002f:trace:msi:resolve_target_folder already resolved to L"C:\Program Files\Kalypso Media\Dungeons Demo" 002f:trace:msi:resolve_target_folder working to resolve L"WixPlayTask0_Application" 002f:trace:msi:resolve_target_folder already resolved to L"C:\0\" 002f:trace:msi:ITERATE_CreateShortcuts Writing shortcut to L"C:\0\Play.lnk" --- snip ---
Parts of "Directory" table, exported in orca:
--- snip --- Directory Directory_Parent DefaultDir s72 S72 l255
WixPlayTasksRoot_Application TARGETDIR . ...
WixPlayTask0_Application WixPlayTasksRoot_Application 0 --- snip ---
Parts of "Shortcut" table, exported in orca:
--- snip --- Shortcut Directory_ Name Component_ Target Arguments Description Hotkey Icon_ IconIndex ShowCmd WkDir DisplayResourceDLL DisplayResourceId DescriptionResourceDLL DescriptionResourceId s72 s72 l128 s72 s72 S255 L255 I2 S72 I2 I2 S72 S255 I2 S255 I2
WixPlayTask0_Application WixPlayTask0_Application 1yab2vy1.pla|Play Application [#Dungeons.exe] APPLICATIONFOLDER WixPlayTask1_Application WixPlayTask1_Application kvubp0qn.pla|Continue Playing Application [#Dungeons.exe] -continue APPLICATIONFOLDER --- snip ---
Parts of "Custom action" table, exported in orca:
--- snip --- WixPlayTasksRoot_Application 51 WixPlayTasksRoot_Application [CommonAppDataFolder]Microsoft\Windows\GameExplorer{BB112F90-7C81-4352-8823-861D3957CF8A}\PlayTasks\ --- snip ---
Parts of "InstallUISequence" table, exported in orca:
--- snip --- Action Condition Sequence s72 S255 I2
CostInitialize 800 ... CostFinalize 1000 --- snip ---
Parts of "InstallExecuteSequence" table, exported in orca (see custom action before costing finalize):
--- snip --- Action Condition Sequence s72 S255 I2
CostInitialize 800 .. WixPlayTasksRoot_Application 994 .. CostFinalize 1000 .. CreateShortcuts 4500 --- snip ---
You can work around the bug by running the installer in "silent" mode, e.g:
$> wine msiexec -i dungeons_demo_int.msi /quiet
This forces msi to not process InstallUISequence table so costing will be done once (in InstallExecuteSequence) which resolves the target folder for shortcuts.
Regards