I have a very large WinForms application that i would like to deploy via docker.
The application is composed of hundreds of COM dlls that require registration.
The application is also composed of many .NET assemblies on Framework 4.62. Some of which also require COM registration.
The application needs access to remote and/or local file storage as well and SQL server. Assumption is that SQL Server is managed by the host OS as i do not plan to include it in a container.
How do I deploy COM dlls in a Container that need to be registered ?
Please point me to any resources that would be helpful based on the information above.
Windows GUI applications cannot run in containers, as of today. So containerizing your WinForms app may not be worth the effort, especially because it also involves 32-bit COM dlls.
That said, if you were containerizing a non-GUI service type of application, registering 32-bit COM dlls in containers is the same as registering them on regular Windows. Start from the microsoft/windowsservercore image, and use %WINDIR%\syswow64\regsvr32.exe.
Example Dockerfile:
FROM microsoft/windowsservercore
COPY your32bitCOM.dll C:\SomeDirectory\your32bitCOM.dll
RUN %WINDIR%\syswow64\regsvr32.exe C:\SomeDirectory\your32bitCOM.dll
...
I have same problem but Not working when I tried with following code:
FROM microsoft/windowsservercore
COPY your32bitCOM.dll C:\SomeDirectory\your32bitCOM.dll
RUN %WINDIR%\syswow64\regsvr32.exe C:\SomeDirectory\your32bitCOM.dll
Dear Friends,
Is there any permanent solution for this problem. I have tried most of the solutions found in the internet to register my third party DLLs in the windows registry. But nothing helps.
my current docker file as below.
escape=`
FROM microsoft/windowsservercore
FROM microsoft/iis
SHELL [“powershell”, “-command”]
Dear All,
The ongoing issue with third party DLL registration got resolved.
First of all, I had to copy a dll “msvbvm60.dll” to the DLL folder to copy to the containers. So with out this DLL, the other DLLs will not get registered. The “msvbvm60.dll” can be found in c:\windows\syswow64\msvbvm60.dll folder of your local machine.
Another issue was vbrun60sp6.exe need to start before moving the DLLS. vbrun60sp6.exe is another important component for the third party DLLs to get registered.
So the third party registration in the docker file would look like below.
RUN Start-Process c:\dll\vbrun60sp6.exe -Wait; Start-Process c:\Windows\SysWOW64\regsvr32.exe -ArgumentList '/s', "c:\dll\ErrMngr.dll -Wait;
Let me know if this helps anyone.
Now I am facing another issue. To enable windows authentication, we need to configure gMSA. I do not have any idea about the gMSA configuration. From google I am finding that we need to have min win 2012 server to do that. So cant we implement gMSA on local machine? and if possible, what are the steps to do so. Please suggest.
Make sure the command is being run from a 64-bit process (or a 64-bit cmd.exe console window). Otherwise, the %windir%\System32\regsvr32.exe command will be redirected to %windir%\SysWoW64\regsvr32.exe and a 32-bit regsrv32 will be run ttrockstars (which can’t register 64-bit DLLs).
You could also try using %windir%\sysnative\regsvr32.exe which will redirect to the real %windir%\System32\ directory (but only from a 32-bit process, so if you use that take care to make sure no one tries to run the command from a 64-bit process).
I tried using vbrun60sp6.exe as well as copying msvbvm60.dll to both the directory where my com application is located as well as SysWOW64. It had no effect, registration still silently fails.
Trying System32 instead of SysWOW64 didn’t help, either.
Is there any update on this issue? I am trying to register a 32 bit ocx file on a Windows container. Although the command regsvr32 “myfile.ocx” gets executed, it doesnt seem to register. Is there a workaround for this?
Also have the same issue using servercore:ltsc2019. The workaround listed in this topic does not work. The vbrun60sp6.exe process never ends even when ran in quiet mode. Is there any way to do this ? We are trying to convert a legacy desktop application to use in containers. We dumped the UI part and kept only the “services” part but regsvr32.exe /S silently fails.
The msvbvm60.dll is not required, at least it works without that dll for me, vbrun60sp6.exe does the major patches. I have following files in my working directory:
Dockerfile
L1CPN01.dll
vbrun60sp6.exe
My Dockerfile:
FROM mcr.microsoft.com/dotnet/framework/runtime:4.7.2
WORKDIR /app
COPY ./L1CPN01.dll ./
COPY ./vbrun60sp6.exe ./
RUN vbrun60sp6.exe
RUN regsvr32 ./L1CPN01.dll /s
Here is trace from my docker build command:
docker build .
Sending build context to Docker daemon 2.544MB
Step 1/6 : FROM mcr.microsoft.com/dotnet/framework/runtime:4.7.2
---> 8d10d9ac2cbe
Step 2/6 : WORKDIR /app
---> Using cache
---> ccbcb5f1e3d3
Step 3/6 : COPY ./L1CPN01.dll ./
---> Using cache
---> 0f5da7ba8fbc
Step 4/6 : COPY ./vbrun60sp6.exe ./
---> ae2f485b0f23
Step 5/6 : RUN vbrun60sp6.exe
---> Running in 43b8f3a7ec33
Removing intermediate container 43b8f3a7ec33
---> a14d517236da
Step 6/6 : RUN regsvr32 ./L1CPN01.dll /s
---> Running in 4d197284c9d9
Removing intermediate container 4d197284c9d9
---> 63434f170bb4
Successfully built 63434f170bb4