15

Need help with dockerizing legacy application I have a legacy app which contains multiple components(msi installers). These components use variety of technologies like C#, windows forms, C++, MFC, .net remoting, C# webservices(asmx). Out of these components a couple of them are desktop ui applications. I was researching the feasibility of dockerizing these components. I am aware that it is not possible to display UI from docker containers, but the UI components also have a command-line counterpart using which we can perform all the operations which can be done with UI. I started with a simple component. This contains asmx web services developed in C# and is generally hosted on IIS on a windows machine. It installs its files into the following locations

  1. C:\program Files\ ==> configurable
    1. C:\programData\

I created the docker file with following actions

  1. take a windows server core image and enable iis and other dependencies
    1. Copy the installer from host machine to the container
    2. Run the installer in silent mode using msiexec command.

When I run docker build command using this docker file, I am getting an error Could not access network location "C:\Program Files\\

No help from google. Can anybody help me in getting around the issue. I have a couple of questions 1. Does a docker container by default contain default windows directories like program files, program files(x86), user profile, Program data and app data?

edit: Apologies for delayed response. Providing the docker file below

FROM microsoft/aspnet
WORKDIR C:\\Installers
COPY EKBCS.exe C:\\Installers\\myinstaller.exe
COPY EKBCS.properties C:\\Installers\\myinstaller.properties
#RUN msiexec /unreg
#RUN msiexec /regserver
#RUN ["net start", "msiserver"]
RUN ["myinstaller.exe", "/l*v myinstaller.log",  "/qn PROPERTYFILE=myinstaller.properties"]
ENTRYPOINT ["powershell"]

Following is the error in the installer log.

-- Error 1719. The Windows Installer Service could not be accessed. This can occur if you are running Windows in safe mode, or if the Windows Installer is not correctly installed. Contact your support personnel for assistance.

I tried unregistering and registering msi installer service but that doesnt help. Hence commented those lines. Any help very much appreciated.

Satish
  • 445
  • 2
  • 4
  • 15
  • 1
    A `windowsservercore` image already has the Program Files, Program Files(x86) and other directories. You may find more by running a `dir` command on a container created directly from `windowsservercore` by using the command: `docker run -it microsoft/windowsservercore:latest` – KatariaA Apr 25 '19 at 09:59

1 Answers1

8

I've done similar work 2 years ago, dockerizing some C# code we had in our organisation.
Here's a snippet from one of the Dockerfile that should help you achieve what you are trying to do -

FROM microsoft/windowsservercore

SHELL ["powershell", "-Command", "$ErrorActionPreference = 'Stop'; $ProgressPreference = 'SilentlyContinue';"]

#Copy installers
RUN (New-Object System.Net.WebClient).DownloadFile('https://download.microsoft.com/download/B/4/A/B4A8422F-C564-4393-80DA-6865A8C4B32D/MicrosoftAzureAuthoringTools-x64.msi', 'c:\tools\MicrosoftAzureAuthoringTools-x64.msi') ;\
    (New-Object System.Net.WebClient).DownloadFile('https://download.microsoft.com/download/B/4/A/B4A8422F-C564-4393-80DA-6865A8C4B32D/MicrosoftAzureLibsForNet-x64.msi', 'c:\tools\MicrosoftAzureLibsForNet-x64.msi') ;\
    Start-Process 'msiexec' -ArgumentList '/i c:\tools\MicrosoftAzureAuthoringTools-x64.msi /quiet /qn /norestart /log c:\tools\installAuth.log'; \
    Start-Sleep -s 30 ;\
    Start-Process 'msiexec' -ArgumentList '/i c:\tools\MicrosoftAzureLibsForNet-x64.msi /quiet /qn /norestart /log c:\tools\installLib.log';\
    Start-Sleep -s 30 ;\
    Remove-Item c:\tools\*.msi -force

My example downloads the files from the internet, then installs it from the c:\tools folder to which they were downloaded to, but it should work just as well and also eliminates dependency on files existing on the host machine.
Hope it helps.

Yaron Idan
  • 6,207
  • 5
  • 44
  • 66
  • 1
    I seem to have problems installing into C:\program Files directory. Does these installs into C:\program Files? – Satish Apr 25 '19 at 11:21
  • It does not, but it should successfully install your msi file, thus making the error you are currently getting irrelevant. As others mentioned in the question's comments - if you paste your dockerfile we might be able to help you install the specific msi you are having trouble with. – Yaron Idan Apr 25 '19 at 12:53