none
Windows 2016 container and Crystal Reports Runtime RRS feed

  • Question

  • The Crystal Reports runtime fails to install.

    I'm starting with microsoft/dotnet-framework:3.5 since it needs the 3.5 framework.

    Simply running the installer CRRuntime_64bit_13_0_19.msi a few errors occur towards the end and it aborts the install.

    Has anyone been able to install the CR runtime in core?

    Tuesday, May 30, 2017 4:22 PM

Answers

  • I reproduced this issue, here's a snippet from the MSI installation log (msiexec /i x.msi /l*v log.txt):

    MSI (s) (24:94) [11:18:31:981]: Product: SAP Crystal Reports runtime engine for .NET Framework (64-bit) -- Error 1904. Module C:\Program Files (x86)\SAP BusinessObjects\Crystal Reports for .NET Framework 4.0\Common\SAP BusinessObjects Enterprise XI 4.0\win64_x64\pageobjectmodel.dll failed to register.  HRESULT -2147024770.  Contact your support personnel.

    -2147024770 translates to ERROR_MOD_NOT_FOUND.

    I extracted the DLL from the MSI and looked at its dependencies. Turns out, pageobjectmodel.dll requires oledlg.dll (which isn't included in Windows Server 2016 Server Core). This is understandable because these APIs throw up UI that could block you.

    The APIs in question:

    OleUIEditLinksA
    OleUIInsertObjectA
    OleUIPasteSpecialA
    OleUIConvertA
    OleUIUpdateLinksA
    OleUIAddVerbMenuA

    Now, you're probably not interested in using functionality that would end up calling these OLE APIs. So if you want to continue, knowing the potential pitfalls, I'd start the container with a volume containing oledlg.dll from a full install of Windows Server (or extracted from the installation media). (You can use the volume mapping feature of Docker to get that file in there.)

    From your mounted directory, you can then simply then [copy oledlg.dll %systemroot%\System32].

    Installation should succeed then. (Mine did.)


    • Edited by WithinRafaelMVP Tuesday, May 30, 2017 7:00 PM
    • Proposed as answer by WithinRafaelMVP Tuesday, May 30, 2017 7:01 PM
    • Marked as answer by DanB Wednesday, May 31, 2017 12:58 AM
    Tuesday, May 30, 2017 6:59 PM

All replies

  • I reproduced this issue, here's a snippet from the MSI installation log (msiexec /i x.msi /l*v log.txt):

    MSI (s) (24:94) [11:18:31:981]: Product: SAP Crystal Reports runtime engine for .NET Framework (64-bit) -- Error 1904. Module C:\Program Files (x86)\SAP BusinessObjects\Crystal Reports for .NET Framework 4.0\Common\SAP BusinessObjects Enterprise XI 4.0\win64_x64\pageobjectmodel.dll failed to register.  HRESULT -2147024770.  Contact your support personnel.

    -2147024770 translates to ERROR_MOD_NOT_FOUND.

    I extracted the DLL from the MSI and looked at its dependencies. Turns out, pageobjectmodel.dll requires oledlg.dll (which isn't included in Windows Server 2016 Server Core). This is understandable because these APIs throw up UI that could block you.

    The APIs in question:

    OleUIEditLinksA
    OleUIInsertObjectA
    OleUIPasteSpecialA
    OleUIConvertA
    OleUIUpdateLinksA
    OleUIAddVerbMenuA

    Now, you're probably not interested in using functionality that would end up calling these OLE APIs. So if you want to continue, knowing the potential pitfalls, I'd start the container with a volume containing oledlg.dll from a full install of Windows Server (or extracted from the installation media). (You can use the volume mapping feature of Docker to get that file in there.)

    From your mounted directory, you can then simply then [copy oledlg.dll %systemroot%\System32].

    Installation should succeed then. (Mine did.)


    • Edited by WithinRafaelMVP Tuesday, May 30, 2017 7:00 PM
    • Proposed as answer by WithinRafaelMVP Tuesday, May 30, 2017 7:01 PM
    • Marked as answer by DanB Wednesday, May 31, 2017 12:58 AM
    Tuesday, May 30, 2017 6:59 PM
  • Wow.. thanks! That is an awesome work-around! 
    Wednesday, May 31, 2017 1:00 AM
  • For the record, I got oledlg32.dll from my Windows 10 Enterprise install system32 and SysWOW64 folders (renamed them 32 and 64 so I could store them in the same docker context folder) and to get the Crystal Reports Runtime installed, I also had to install the Visual C++ Runtime files here:

    http://www.microsoft.com/downloads/details.aspx?familyid=200B2FD9-AE1A-4A14-984D-389C36F85647&displaylang=en

    Useful information about dependencies for older versions of the runtime can be found here:

    https://blogs.sap.com/2009/03/09/building-a-deployment-project-with-crystal-reports-2008-net-2005-net-2008/

    So in total, my Dockerfile for installing Crystal Reports Runtime looked like:

    RUN copy C:\Installs\oledlg32.dll c:\windows\system32\oledlg.dll; \
        C:\windows\system32\regsvr32.exe c:\windows\system32\oledlg.dll; \
        copy C:\Installs\oledlg64.dll c:\windows\syswow64\oledlg.dll; \
        c:\windows\syswow64\regsvr32.exe c:\windows\syswow64\oledlg.dll; \
        Start-Process msiexec.exe -Wait -NoNewWindow -ArgumentList '/i C:\vcredist.msi /quiet /qn /lie!+ c:/msi_install.log'; \
        Start-Process msiexec.exe -Wait -NoNewWindow -ArgumentList '/i C:\CRRuntime_64bit_13_0_9.msi /quiet /qn /lie!+ c:/msi_install.log'



    Friday, January 18, 2019 5:52 AM
  • It looks like in the latest images we do not need to add the dll's any longer. I see the dll's in the image.

    FROM mcr.microsoft.com/windows:1809

    I also tested with the 2017 C++ runtime and it works fine. I included both the x32 and x64 for all components or just remove x32 or x64 pieces if not needed.

    Since I also use an xml data source I include java and the CR xml piece.

    RUN C:/install/jre-8u201-windows-i586.exe /s \
        C:/install/jre-8u201-windows-x64.exe  /s

    # INSTALL Crystal Reports Runtimes
    # c++ runtimes  http://asawicki.info/news_1597_installing_visual_c_redistributable_package_from_command_line.html
    RUN powershell.exe -Command \
        $ErrorActionPreference = 'Stop'; \
        Start-Process "2017/vc_redist.x86.exe" -Wait -NoNewWindow -ArgumentList '/install /passive /norestart'; \
        Start-Process "2017/vc_redist.x64.exe" -Wait -NoNewWindow -ArgumentList '/install /passive /norestart'; \
        Start-Process -FilePath 'CRRuntime_32bit_13_0_24.msi' -ArgumentList '/quiet', '/NoRestart' -Wait ; \
        Copy-Item -Recurse -Containe -Force -Path 'CRforVS_crdbxml_13_0_24/32' -Destination 'C:/Program Files (x86)/SAP BusinessObjects/Crystal Reports for .NET Framework 4.0/Common/SAP BusinessObjects Enterprise XI 4.0/win32_x86' ; \
        Copy-Item -Recurse -Containe -Force -Path 'CRforVS_crdbxml_13_0_24/java' -Destination '"C:/Program Files (x86)/SAP BusinessObjects/Crystal Reports for .NET Framework 4.0/Common/SAP BusinessObjects Enterprise XI 4.0/java'

    • Edited by DanB Saturday, February 2, 2019 2:54 PM missed the x64 of c++
    Saturday, February 2, 2019 2:53 PM