.net - 在 docker 容器上安装 msi
问题描述
在 dockerizing 遗留应用程序方面需要帮助我有一个包含多个组件(msi 安装程序)的遗留应用程序。这些组件使用各种技术,如 C#、Windows 窗体、C++、MFC、.net 远程处理、C# webservices(asmx)。在这些组件中,有几个是桌面 ui 应用程序。我正在研究 dockerizing 这些组件的可行性。我知道从 docker 容器中显示 UI 是不可能的,但是 UI 组件也有一个命令行对应项,我们可以使用它来执行所有可以使用 UI 完成的操作。我从一个简单的组件开始。这包含用 C# 开发的 asmx Web 服务,通常托管在 Windows 机器上的 IIS 上。它将其文件安装到以下位置
- C:\program Files\ ==> 可配置
- C:\程序数据\
我使用以下操作创建了 docker 文件
- 获取 Windows 服务器核心映像并启用 iis 和其他依赖项
- 将安装程序从主机复制到容器
- 使用 msiexec 命令以静默模式运行安装程序。
当我使用此 docker 文件运行 docker build 命令时,出现错误无法访问网络位置“C:\Program Files\\
谷歌没有帮助。任何人都可以帮助我解决这个问题。我有几个问题 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 安装程序服务,但这没有帮助。因此评论了这些行。非常感谢任何帮助。
解决方案
2 年前我做过类似的工作,对我们组织中的一些 C# 代码进行 dockerizing。
这是 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
它们下载到的文件夹中安装它,但它应该也能正常工作,并且还消除了对主机上现有文件的依赖。
希望能帮助到你。
推荐阅读
- r - 使用 dplyr 将列的值与每组中的参考值进行比较
- html - 三角形菜单
- javascript - 更新两个字段位于对象数组中的文档
- python - ValueError:计算损失时没有为任何变量提供梯度
- javascript - 在 React 中使用 orderBy('createdAt') 方法时,从 FireStore 数据库获取的数据在加载后消失
- asp.net - 如何从选择中自动检查复选框
- object - 使用 typeof === 带有 Flow 错误的自定义类型进行类型检查
- javascript - 如何仅在 k6 负载测试中为每个 VU 使用/分配 CSV 文件中的唯一数据行
- sql - 如果只有第一条记录和最后一条记录,如何在查询中显示创建的记录数
- c# - Unity 播放动画选定的次数