Установка MSI на Docker-контейнер - PullRequest
1 голос
/ 25 апреля 2019

Нужна помощь с докеризацией устаревшего приложения У меня есть устаревшее приложение, которое содержит несколько компонентов (установщики MSI). Эти компоненты используют различные технологии, такие как C #, формы Windows, C ++, MFC, удаленное взаимодействие .net, веб-сервисы C # (asmx). Из этих компонентов пара приложений для настольных ПК. Я изучал возможность докертизации этих компонентов. Я знаю, что невозможно отобразить пользовательский интерфейс из докер-контейнеров, но компоненты пользовательского интерфейса также имеют аналог командной строки, с помощью которого мы можем выполнять все операции, которые можно выполнить с помощью пользовательского интерфейса. Я начал с простого компонента. Он содержит веб-службы asmx, разработанные на C #, и обычно размещаются в IIS на компьютере с Windows. Он устанавливает свои файлы в следующие места

  1. C: \ Program Files \ ==> настраивается
    1. C: \ ProgramData \

Я создал файл Docker со следующими действиями

  1. взять образ ядра сервера Windows и включить iis и другие зависимости
    1. Скопируйте установщик с хост-машины в контейнер
    2. Запустите программу установки в режиме без вывода сообщений с помощью команды msiexec.

Когда я запускаю команду сборки docker, используя этот файл docker, я получаю сообщение об ошибке «Не удалось получить доступ к сетевому расположению» C: \ Program Files \\

Нет помощи от Google. Кто-нибудь может мне помочь в решении этой проблемы. у меня есть пара вопросов 1. Содержит ли док-контейнер по умолчанию каталоги окон по умолчанию, такие как программные файлы, программные файлы (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. Это может произойти, если вы используете Windows в безопасном режиме или если Установщик Windows установлен неправильно. Обратитесь в службу поддержки персонал для помощи.

Я попытался отменить регистрацию и регистрацию службы установки MSI, но это не помогло. Следовательно, прокомментировал эти строки. Любая помощь очень ценится.

1 Ответ

0 голосов
/ 25 апреля 2019

Я проделал аналогичную работу 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

Мой пример загружает файлы из Интернета, затем устанавливает их из папки c:\tools, в которую они были загружены, но это должно работать так же хорошо, а также устраняет зависимость от файлов, существующих на хост-машине.
Надеюсь, это поможет.

...