[Bug 58578] New: Hygeia Pharmacy: complains that Microsoft ReportViewer is not installed (unimplemented MsiProvideAssemblyW() ?)
http://bugs.winehq.org/show_bug.cgi?id=58578 Bug ID: 58578 Summary: Hygeia Pharmacy: complains that Microsoft ReportViewer is not installed (unimplemented MsiProvideAssemblyW() ?) Product: Wine Version: 10.12 Hardware: x86-64 OS: Linux Status: UNCONFIRMED Severity: normal Priority: P2 Component: -unknown Assignee: wine-bugs(a)winehq.org Reporter: peathot(a)hotmail.com Distribution: --- Created attachment 79093 --> http://bugs.winehq.org/attachment.cgi?id=79093 Terminal output of Hygeia Pharmacy running under Wine Hygeia Pharmacy is a .NET 4 application for pharmacy retail. When the application starts up, it will check for various shared components, ending up complaining that Microsoft Report Viewer has to be installed despite already installed. Attached is the screenshot of the error. It says, "It's necessary to install an additional programed named Microsoft Report Viewer" ("มีความจำเป็นต้องติดตั้งโปรแกรมเสริมที่ชื่อว่า Microsoft Report Viewer"). Terminal output reveals 2 interesting FIXME's: ``` 0174:fixme:msi:MsiProvideAssemblyW L"Microsoft.ReportViewer.Common, Version=10.0 .0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MS IL", L"C:\\Program Files\\HygeiaPharmacy\\HygeiaPharmacy.exe.config", 0, 0, 10D7 A618, 10D7A614 0174:fixme:msi:MsiProvideAssemblyW L"Microsoft.ReportViewer.Common, Version=10.0 .0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MS IL", (null), 0, 0, 10D7A618, 10D7A614 ``` This leads me to believe that the application chokes up because it does not receive the correct path to this .NET assembly, part of MS ReportViewer 2010. --- Looking into multiple documents and into Wine itself, I _think_ it would be relatively simple to implement MsiProvideAssembly[A|W]() using facilities already implemented in Wine. Bug 58577 plays an important role on this. I actually would love to get my hands dirty, if not for 2 problems: 1. I don't actually have much time myself. 2. Many years ago, I disassembled a different component of Windows (related to MDM/management policy) in order to debug my graduating project. I forgot everything by now, and it's IMHO not related, but combined with 1. I think it's probably better to stay safe. (Can I explain some high-level idea? Will I run afoul of 2.?) A number of MSDN documents that might be useful: https://learn.microsoft.com/en-us/windows/win32/api/msi/nf-msi-msiprovideass... https://learn.microsoft.com/en-us/windows/win32/msi/assembly-registry-keys-w... Also helpful is a small test program I write myself to exercise MsiProvideAssemblyW() in the same way as the application (and in a slightly different way). On Windows 11, this outputs as follow: ``` MsiProvideAssemblyW("Microsoft.ReportViewer.Common, ..." (qualified)) returns 0 Returned path (119): C:\WINDOWS\assembly\GAC_MSIL\Microsoft.ReportViewer.Common\10.0.0.0__b03f5f7f11d50a3a\Microsoft.ReportViewer.Common.dll MsiProvideAssemblyW("Microsoft.ReportViewer.Common" (unqualified)) returns 0 Returned path (119): C:\WINDOWS\assembly\GAC_MSIL\Microsoft.ReportViewer.Common\10.0.0.0__b03f5f7f11d50a3a\Microsoft.ReportViewer.Common.dll ``` On Wine, it outputs (excluding Wine's output itself): ``` MsiProvideAssemblyW("Microsoft.ReportViewer.Common, ..." (qualified)) returns 120 MsiProvideAssemblyW("Microsoft.ReportViewer.Common" (unqualified)) returns 120 ``` --- Following is the way I run Hygeia Pharmacy. Hygeia Pharmacy is a relatively complex application and requires the full .NET installation (Mono is not enough). The following commands recreate the environment from scratch: ``` export WINEARCH=win32 export WINEPREFIX=/a/new/prefix winetricks dotnet48 jet40 mdac28 wine ReportViewer.exe # sha256sum: e8ff182e202b321ac2b9245ee20c4eb659008ffb2a34cdbd3486f9da3d4c3e06 wine hygeia_trial_install.2.6.28.1.exe # sha256sum: 380085defb0af240f144d603da70d09a76c940a27a65953a9fbe3668c321b4e2 wine "C:\\\\users\\\\Public\\\\Desktop\\\\Hygeia Pharmacy.lnk" &>hygeia_pharmacy_wine_output.txt ``` --- The (trial) version can be obtained from https://www.hygeia-pharmacy.com/trial/. However, it requires a (free) registration, and the website is entirely in Thai with no English version. In order to (try to) help you with the registration, the registration page at https://www.hygeia-pharmacy.com/register/ requires the followed: 1. A chosen username ("Hygeia ID") 2. A chosen password. 3. Your full name 4. Your email. 5. A math captcha (input the equation's answer). I can't remember if there's an email verification after that step or not, because it's been a long time since I registered myself. Once logged in, https://www.hygeia-pharmacy.com/trial/ will show a big blue button for downloading the trial version. The same page will also be a smaller link for "MS Report Viewer" which is hosted by Hygeia Pharmacy themselves (if you prefer an MS link, see the end of bug 58577). -- Do not reply to this email, post in Bugzilla using the above URL to reply. You are receiving this mail because: You are watching all bug changes.
http://bugs.winehq.org/show_bug.cgi?id=58578 --- Comment #1 from Ratchanan Srirattanamet <peathot(a)hotmail.com> --- Created attachment 79094 --> http://bugs.winehq.org/attachment.cgi?id=79094 Screenshot of the error The full translation is: It's necessary to install an additional programed named Microsoft Report Viewer. Click [Downloading and installation method] (The button links to a help page on Hygeia Pharmacy website) -- Do not reply to this email, post in Bugzilla using the above URL to reply. You are receiving this mail because: You are watching all bug changes.
http://bugs.winehq.org/show_bug.cgi?id=58578 --- Comment #2 from Ratchanan Srirattanamet <peathot(a)hotmail.com> --- Created attachment 79095 --> http://bugs.winehq.org/attachment.cgi?id=79095 A small test program exercising MsiProvideAssemblyW() -- Do not reply to this email, post in Bugzilla using the above URL to reply. You are receiving this mail because: You are watching all bug changes.
http://bugs.winehq.org/show_bug.cgi?id=58578 --- Comment #3 from Ratchanan Srirattanamet <peathot(a)hotmail.com> --- Created attachment 79096 --> http://bugs.winehq.org/attachment.cgi?id=79096 A small test program exercising MsiProvideAssemblyW() (compiled with MSVC) -- Do not reply to this email, post in Bugzilla using the above URL to reply. You are receiving this mail because: You are watching all bug changes.
http://bugs.winehq.org/show_bug.cgi?id=58578 --- Comment #4 from Ratchanan Srirattanamet <peathot(a)hotmail.com> --- Oh, and if the component (MS Report Viewer) is not installed on the computer, the test program should print: ``` MsiProvideAssemblyW("Microsoft.ReportViewer.Common, ..." (qualified)) returns 1607 MsiProvideAssemblyW("Microsoft.ReportViewer.Common" (unqualified)) returns 1607 ``` -- Do not reply to this email, post in Bugzilla using the above URL to reply. You are receiving this mail because: You are watching all bug changes.
http://bugs.winehq.org/show_bug.cgi?id=58578 --- Comment #5 from Ratchanan Srirattanamet <peathot(a)hotmail.com> --- I'm now trying to write a conformance test for MsiProvideAssembly[A|W](). This involves mocking assembly installation into Windows Installer's registry. I look into dlls/msi/tests and see that some tests mock installation by actually creating a .msi file and install it, while others directly set the registry. How are the methods chosen? What are advantages and disadvantages to these methods? -- Do not reply to this email, post in Bugzilla using the above URL to reply. You are receiving this mail because: You are watching all bug changes.
participants (1)
-
WineHQ Bugzilla