在docker容器上安装msi

时间:2019-04-25 09:49:42

标签: .net docker windows-installer docker-build

需要帮助进行Docker化旧版应用程序 我有一个包含多个组件(msi安装程序)的旧版应用程序。这些组件使用各种技术,例如C#,Windows窗体,C ++,MFC,.net远程处理,C#Web服务(asmx)。在这些组件中,有两个是桌面ui应用程序。 我正在研究将这些组件进行码头化的可行性。我知道无法显示来自docker容器的UI,但是UI组件还具有命令行对应项,通过它我们可以执行UI可以完成的所有操作。 我从一个简单的组件开始。它包含用C#开发的asmx Web服务,通​​常托管在Windows计算机上的IIS上。 它将文件安装到以下位置

  1. C:\ program Files \ ==>可配置
    1. C:\ programData \

我通过以下操作创建了docker文件

  1. 获取Windows服务器核心映像并启用iis和其他 依存关系
    1. 将安装程序从主机复制到容器中
    2. 使用msiexec命令以静默方式运行安装程序。

当我使用此docker文件运行docker build命令时,出现错误无法访问网络位置“ C:\ Program Files \\

没有Google的帮助。 谁能帮助我解决这个问题。 我有一些问题 1.默认情况下,Docker容器是否包含默认Windows目录,例如程序文件,程序文件(x86),用户配置文件,程序数据和应用程序数据?

编辑: 抱歉延误响应。 在下面提供docker文件

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"]

以下是安装程序日志中的错误。

  

-错误1719。无法访问Windows Installer服务。如果您以安全模式运行Windows,或者   Windows Installer安装不正确。与您的支持人员联系   协助人员。

我尝试注销并注册msi安装程序服务,但这无济于事。因此评论了这些话。 任何帮助都非常感谢。

1 个答案:

答案 0 :(得分:0)

2年前,我做过类似的工作,将我们组织中的一些C#代码进行了码头作业。 这是其中一个Dockerfile的片段,应该可以帮助您实现所要尝试的工作-

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

我的示例从Internet下载文件,然后从将它们下载到的c:\tools文件夹中安装文件,但是它应该也能正常工作,并且消除了对主机上现有文件的依赖。 br /> 希望对您有所帮助。