https://bugs.winehq.org/show_bug.cgi?id=38761
Bug ID: 38761 Summary: Notation Software installation fails when Program Installation Folder is modified Product: Wine Version: 1.7.44 Hardware: x86 OS: Linux Status: UNCONFIRMED Severity: normal Priority: P2 Component: msi Assignee: wine-bugs@winehq.org Reporter: reinhold.hoffmann@hotmail.com Distribution: ---
Created attachment 51696 --> https://bugs.winehq.org/attachment.cgi?id=51696 Comparison of Windows and Wine installation
Hi Wine team,
we at Notation Software use VS2010 installer.
When the user modifies the standard Program Folder (target folder C:\Program Files (x86)) a new folder called "TempFolder" is created in the Program Folder and all temporary installation files go into that new folder. But the current temp folder setting for the installing user is still valid.
As a result the installation fails because the temp files are not installed in the users's temp folder but in that newly created folder which is called "TempFolder". Definitely this new folder "TempFolder" isn't the real temp folder.
Please see in the attached zip the files and according explanation:
(1) VS2010 Installer configuration file "VS2010_configuration_of_installation_folders.png" Comparison of the installation on Windows with the installation on Wine
(2) How the files end up on OpenSuse file "Folder_Setup_after_Installation_on_Wine.png"
As a workaround we give our customers the advice not to change the Program Folder. Then all works fine.
If siomeone wants to try that scenario our trial version can be downloaded from http://www.notation.com/DownloadComposerTrial.php Please modify the standard installation folder according to the screen shots (1), (2)
We see this wrong behaviour in all Linux versions of Wine 1.7.44 and Mac from Winebottler (Wine 1.7.37)
Best regards,
Reinhold
https://bugs.winehq.org/show_bug.cgi?id=38761
Austin English austinenglish@gmail.com changed:
What |Removed |Added ---------------------------------------------------------------------------- Keywords| |download, Installer
https://bugs.winehq.org/show_bug.cgi?id=38761
Reinhold reinhold.hoffmann@hotmail.com changed:
What |Removed |Added ---------------------------------------------------------------------------- Summary|Notation Software |Installation failure using |installation fails when |Visual Studio 2010, 2015 |Program Installation Folder |installer |is modified |
--- Comment #1 from Reinhold reinhold.hoffmann@hotmail.com --- Hi Wine team,
As this bug report is still uncommented I want to make you aware again.
https://bugs.winehq.org/show_bug.cgi?id=38761
--- Comment #2 from Reinhold reinhold.hoffmann@hotmail.com --- I have changed the headline because it might be missleading. The bug report is about using installations files which are created with Visual Studio Installer.
We use Visual Studio 2010 installer where the reported error occurs. Microsoft's recent plans were to depreciate the Visual Studio installer after 2010.
However, their plans were revisited and the strategy was changed. As you see here (https://visualstudiogallery.msdn.microsoft.com/f1cc3f3e-c300-40a7-8797-c509f...) Microsoft relaunched the Visual Studion installer as an extension package to Visual Studio 2015 probably because it is widely used :-) and many customers complained about the end of life decision.
We recently had customers which did not followed the workaround advice and ran into this problem. It would be great if somebody may check the bug report that we can get conclusion if this bug is accepted or not.
If we need to provide more information, please let us know.
Thanks
Reinhold
https://bugs.winehq.org/show_bug.cgi?id=38761
Anastasius Focht focht@gmx.net changed:
What |Removed |Added ---------------------------------------------------------------------------- Status|UNCONFIRMED |NEW URL| |http://www.notation.com/Dow | |nloadComposerTrial.php CC| |focht@gmx.net Summary|Installation failure using |Multiple installers using |Visual Studio 2010, 2015 |Visual Studio 2010, 2015 |installer |installer technology fail | |when the default | |installation target path is | |changed (notation composer | |3.x) Ever confirmed|0 |1
--- Comment #3 from Anastasius Focht focht@gmx.net --- Hello Reinhold,
confirming.
--- quote --- As this bug report is still uncommented I want to make you aware again. --- quote ---
well, that's unfortunate but can't be avoided as not many people do this kind of work which requires in-depth understanding and many times expert knowledge.
The Wine project has a steady influx of bug reports and many existing bug reports (1000+) not yet analysed but only a small group of developers/support folks. Various reports go under the radar for months unless targeting famous/widely used apps/games or look interesting/challenging to certain folks.
Anyway, I've had a look at this one now.
--- snip --- $ WINEDEBUG=+tid,+seh,+relay,+msi wine msiexec -i Inst_NS_Composer_3_English_Trial.msi >>log.txt 2>&1 ... 002c:trace:msi:ACTION_CostFinalize Building directory properties 002c:trace:msi:msi_resolve_target_folder resolving L"TARGETDIR" ... 002c:trace:msi:msi_get_property returning L"C:\Program Files\Notation_3" for property L"TARGETDIR" ... 002c:trace:msi:msi_set_property 0x156c60 L"TARGETDIR" L"C:\Program Files\Notation_3\" -1 ... 002c:trace:msi:msi_get_property returning L"C:\windows\Fonts\" for property L"FontsFolder" ... 002c:trace:msi:msi_resolve_target_folder L"FontsFolder" resolves to L"C:\windows\Fonts\" 002c:trace:msi:msi_resolve_target_folder resolving L"TEMPFOLDER" 002c:trace:msi:msi_get_property 0x156c60 L"TEMPFOLDER" (nil) 0x33f814 ... 002c:trace:msi:msi_get_property returning L"C:\users\focht\Temp\" for property L"TEMPFOLDER" ... 002c:trace:msi:msi_set_property 0x156c60 L"TEMPFOLDER" L"C:\users\focht\Temp\" -1 ... 002c:trace:msi:msi_resolve_target_folder L"_461946CF33E24F1F8C6C47D9E867DFA9" resolves to L"C:\users\focht\Temp\PQ3ZVI537A3FM2.TMP\Documents\" 002c:trace:msi:msi_resolve_target_folder L"_B7CBAC26035C47F18B6F5F409BE272E2" resolves to L"C:\users\focht\Temp\PQ3ZVI537A3FM2.TMP\" 002c:trace:msi:msi_resolve_target_folder L"TEMPFOLDER" resolves to L"C:\users\focht\Temp\" ... 002c:trace:msi:MSI_ProcessMessage (nil) (nil) (nil) 0 10 L"Action ended 13:55:28: CostFinalize. Return value 0." --- snip ---
Dump of 'Directory' table which is of interest here with 'ORCA' tool:
--- snip --- Directory Directory_Parent DefaultDir s72 S72 l255 Directory Directory TARGETDIR SourceDir _4183CE3144BF419094440ECAD41D6D6C TARGETDIR COMPOS~1|Composer_3 _37B592B7B95848B89840FB73443ED00A _B7CBAC26035C47F18B6F5F409BE272E2 SONGS|Songs _B7CBAC26035C47F18B6F5F409BE272E2 TEMPFOLDER PQ3ZVI~1.TMP|PQ3ZVI537A3FM2.TMP _28B18BAA886D43719199BBE1B15DDCB5 _B7CBAC26035C47F18B6F5F409BE272E2 TEMPLA~1|Templates _461946CF33E24F1F8C6C47D9E867DFA9 _B7CBAC26035C47F18B6F5F409BE272E2 DOCUME~1|Documents FontsFolder TARGETDIR .:FONTSF~1|Fonts Folder TEMPFOLDER TARGETDIR TEMPFO~1|TempFolder DesktopFolder TARGETDIR .:USER'S~1|User's Desktop ProgramMenuFolder TARGETDIR .:USER'S~2|User's Programs Menu --- snip ---
The directory resolution in 'CostFinalize' MSI action is fine. All directory target paths resolved as expected.
Now the folder selection dialog. I changed the target to 'C:\Program Files\test\' via 'Browse':
--- snip --- ... 002c:trace:msi:MSI_EvaluateConditionW 1 <- L"Installed="" AND NOT RESUME" 002c:trace:msi:ACTION_PerformUIAction Performing action (L"FolderForm") ... 002c:trace:msi:MSI_DatabaseOpenViewW L"SELECT * FROM `CustomAction` WHERE `Action` = 'FolderForm'" 0x33f928 ... 002c:Call user32.CreateWindowExW(00000000,7ed19b20 L"MsiDialogCloseClass",008a4c3c L"FolderForm",10000000,80000000,80000000,80000000,80000000,00000000,00000000,00000000,008a4bf8) ret=7ecb1bda ... 002c:trace:msi:dialog_create_window Dialog L"SelectFolderDialog" control L"[SFF_NewFldrBtn]" hwnd 0x100a2 ... 002c:trace:msi:msi_dialog_add_control L"Static", L"FolderLabel", 00000003, L"{\VSI_MS_Sans_Serif13.0_0_0}&Folder:", 00020000 ... 002c:trace:msi:event_subscribe event L"SelectionPath" control L"FolderLabel" attribute L"SelectionPath" ... 002c:trace:msi:msi_get_property returning (null) for property L"TARGETDIR" ... 002c:trace:msi:msi_get_property returning L"C:\Program Files\Notation_3\" for property L"TARGETDIR" 002c:Call user32.SetWindowTextW(00050076,007e6338 L"C:\Program Files\Notation_3\") ret=7ecad8f5 ... 002c:trace:msi:event_subscribe event L"SelectionPath" control L"Body" attribute L"SelectionPath" ... 002c:trace:msi:event_subscribe event L"SelectionPath" control L"FolderText" attribute L"SelectionPath" ... 002c:trace:msi:msi_get_property returning L"TARGETDIR" for property L"SelectFolderDialog_Property" ... 002c:trace:msi:msi_get_property returning L"C:\Program Files\Notation_3\" for property L"TARGETDIR" 002c:Call KERNEL32.FindFirstFileW(0033e818 L"C:\Program Files\Notation_3\*",0033e5c8) ret=7ecaf87c 002c:Ret KERNEL32.FindFirstFileW() retval=ffffffff ret=7ecaf87c ... 002c:trace:msi:msi_dialog_add_control L"BUTTON", L"NewFolderButton", 00380003, L"[SFF_NewFldrBtn]", 00010040 ... 002c:trace:msi:msi_get_property returning L"C:\users\focht\Temp\" for property L"TempFolder" ... 002c:trace:msi:msi_get_property returning L"TARGETDIR" for property L"SelectFolderDialog_Property" ... 002c:trace:msi:msi_get_property returning L"C:\Program Files\" for property L"TARGETDIR" 002c:trace:msi:msi_set_property 0x156c60 L"TARGETDIR" L"C:\Program Files\test\" -1 ... 002c:trace:msi:MSI_DatabaseOpenViewW L"UPDATE `_Property` SET `Value` = ? WHERE `_Property` = 'TARGETDIR'" 0x33e4ac ... 002c:trace:msi:msi_get_property returning L"C:\Program Files\test\" for property L"TARGETDIR" ... 002c:trace:msi:dialog_event_handler handling event L"SetTargetPath" ... 002c:trace:msi:MSI_SetTargetPathW 0x15dc78 L"TARGETDIR" L"C:\Program Files\test\" ... 002c:trace:msi:MSI_DatabaseOpenViewW L"UPDATE `_Property` SET `Value` = ? WHERE `_Property` = 'TARGETDIR'" 0x33e7fc ... 002c:trace:msi:msi_set_property 0x156c60 L"FontsFolder" L"C:\Program Files\test\" -1 ... 002c:trace:msi:MSI_DatabaseOpenViewW L"UPDATE `_Property` SET `Value` = ? WHERE `_Property` = 'FontsFolder'" 0x33e79c ... 002c:trace:msi:msi_resolve_target_folder L"FontsFolder" resolves to L"C:\Program Files\test\" 002c:trace:msi:msi_resolve_target_folder resolving L"TEMPFOLDER" ... 002c:trace:msi:msi_set_property 0x156c60 L"TEMPFOLDER" L"C:\Program Files\test\TempFolder\" -1 ... 002c:trace:msi:MSI_DatabaseOpenViewW L"UPDATE `_Property` SET `Value` = ? WHERE `_Property` = 'TEMPFOLDER'" 0x33e79c ... --- snip ---
When the target installation directory is changed (via folder selection dialog or editing the field manually) the 'TARGETDIR' property which is a parent to various directory properties obviously changes. This is propagated through an event which calls in turn 'SetTargetPath' on the components/packages. Setting the target path causes a re-evaluation of all dependant properties which have 'TARGETDIR' as parent (see 'Directory' table dump).
--- snip --- ... Wine-dbg>b event_set_target_path Breakpoint 1 at 0x7eca534b event_set_target_path [/home/focht/projects/wine/wine.repo/src/dlls/msi/dialog.c:4470] in msi
Wine-dbg>c ...
Backtrace:
Wine-dbg>bt Backtrace: =>0 0x7ec7f2a0 msi_resolve_target_folder(package=0x1467b0, name="_4183CE3144BF419094440ECAD41D6D6C", load_prop=0) [/home/focht/projects/wine/wine.repo/src/dlls/msi/action.c:2333] in msi (0x0033f138) 1 0x7ecbef66 MSI_SetTargetPathW+0xe4(package=0x1467b0, szFolder="TARGETDIR", szFolderPath="C:\Program Files\test") [/home/focht/projects/wine/wine.repo/src/dlls/msi/install.c:584] in msi (0x0033f188) 2 0x7ecb33d8 event_set_target_path+0x8c(dialog=0x1ef188, argument="TARGETDIR") [/home/focht/projects/wine/wine.repo/src/dlls/msi/dialog.c:4480] in msi (0x0033f1b8) 3 0x7ecb36a8 dialog_event_handler+0xa6(dialog=0x1ef188, event="SetTargetPath", argument="TARGETDIR") [/home/focht/projects/wine/wine.repo/src/dlls/msi/dialog.c:4601] in msi (0x0033f208) 4 0x7ecaa822 msi_dialog_send_event+0xc8(dialog=0x1ef188, event="SetTargetPath", arg="TARGETDIR") [/home/focht/projects/wine/wine.repo/src/dlls/msi/dialog.c:931] in msi (0x0033f248)
...
Wine-dbg>n 2342 if (!strcmpW( folder->Directory, szTargetDir )) /* special resolving for target root dir */
Wine-dbg>p *folder {entry={next=0x1422e8, prev=0x17d098}, children={next=0x17d188, prev=0x17d188}, Directory="_4183CE3144BF419094440ECAD41D6D6C", Parent="TARGETDIR", TargetDefault="Composer_3", SourceLongPath="Composer_3", SourceShortPath="COMPOS~1", ResolvedTarget="C:\Program Files\Notation_3\Composer_3", ResolvedSource=0x0(nil), State=FOLDER_STATE_UNINITIALIZED, persistent=0x1, Cost=0, Space=0} ...
Wine-dbg>n set_target_path () at /home/focht/projects/wine/wine.repo/src/dlls/msi/install.c:558 558 LIST_FOR_EACH_ENTRY( fl, &folder->children, FolderList, entry ) Wine-dbg>n ... 560 child = fl->folder; Wine-dbg>n 561 msi_resolve_target_folder( package, child->Directory, FALSE ); Wine-dbg>p *child {entry={next=0x17e070, prev=0x17dc60}, children={next=0x142938, prev=0x142938}, Directory="FontsFolder", Parent="TARGETDIR", TargetDefault="", SourceLongPath="Fonts Folder", SourceShortPath="FONTSF~1", ResolvedTarget="C:\windows\Fonts", ResolvedSource=0x0(nil), State=FOLDER_STATE_UNINITIALIZED, persistent=0, Cost=0, Space=0} ... Wine-dbg>p *child {entry={next=0x17e070, prev=0x17dc60}, children={next=0x142938, prev=0x142938}, Directory="FontsFolder", Parent="TARGETDIR", TargetDefault="", SourceLongPath="Fonts Folder", SourceShortPath="FONTSF~1", ResolvedTarget="C:\Program Files\test", ResolvedSource=0x0(nil), State=FOLDER_STATE_UNINITIALIZED, persistent=0, Cost=0, Space=0} ... --- snip ---
This is fine for the first one '_4183CE3144BF419094440ECAD41D6D6C' which pointed to 'C:\Program Files\Notation_3\Composer_3\' (default target).
The problem is that all directory targets/properties which didn't originally point to a path containing old 'TARGETDIR' have their path reset too, causing for example the incorrect 'TEMPFOLDER' relocation. This is what should not happen.
I think the path for each directory target needs to be checked if it referred to the old 'TARGETDIR' (by full or sub-path) or not. In the latter case the directory target should not be resolved again.
$ sha1sum Inst_NS_Composer_3_English_Trial.msi bdcc963ad73e3ba74d293a394e35f0b03d8a74b0 Inst_NS_Composer_3_English_Trial.msi
$ du -sh Inst_NS_Composer_3_English_Trial.msi 13M Inst_NS_Composer_3_English_Trial.msi
$ wine --version wine-1.8-rc2
Regards
https://bugs.winehq.org/show_bug.cgi?id=38761
--- Comment #4 from Reinhold reinhold.hoffmann@hotmail.com --- Thanks. Reinhold
https://bugs.winehq.org/show_bug.cgi?id=38761
--- Comment #5 from Anastasius Focht focht@gmx.net --- Hello folks,
revisiting, obviously still present.
$ wine --version wine-3.7-77-g540c48b911
Regards
https://bugs.winehq.org/show_bug.cgi?id=38761
tokktokk fdsfgs@krutt.org changed:
What |Removed |Added ---------------------------------------------------------------------------- CC| |fdsfgs@krutt.org
https://bugs.winehq.org/show_bug.cgi?id=38761
Anastasius Focht focht@gmx.net changed:
What |Removed |Added ---------------------------------------------------------------------------- URL|http://www.notation.com/Dow |https://web.archive.org/web |nloadComposerTrial.php |/20170617151441/http://nota | |tion.com/DownloadTrialProdu | |ct.php?Trial_Product=Compos | |er_English
--- Comment #6 from Anastasius Focht focht@gmx.net --- Hello folks,
revisiting, still present.
https://web.archive.org/web/20170617151441/http://notation.com/DownloadTrial...
$ sha1sum Inst_NS_Composer_3_English_Trial.msi f03ef2049b66f8a68a5fd4ee7a6f402e886aa551 Inst_NS_Composer_3_English_Trial.msi
$ du -sh Inst_NS_Composer_3_English_Trial.msi 13M Inst_NS_Composer_3_English_Trial.msi
$ wine --version wine-4.7-98-gd48ffbdc01
Regards
https://bugs.winehq.org/show_bug.cgi?id=38761
joaopa jeremielapuree@yahoo.fr changed:
What |Removed |Added ---------------------------------------------------------------------------- CC| |jeremielapuree@yahoo.fr
--- Comment #7 from joaopa jeremielapuree@yahoo.fr --- Bug still occurs with wine-6.19.