Как установить Access Runtime на Docker контейнер? - PullRequest
1 голос
/ 24 февраля 2020

Я хотел бы установить Access Runtime на Docker контейнер, но при этом получаю ошибку. Вот основные c команды для воспроизведения ошибки.

Сначала запустите интерактивную оболочку с новым Windows контейнером:

docker container run -it mcr.microsoft.com/windows:1809-amd64 cmd.exe

Затем запустите следующий сценарий для воспроизведения:

cd /d C:\
curl https://download.microsoft.com/download/D/B/D/DBD20EF9-A945-4768-AEB0-617BCEA2214A/accessruntime_4288-1001_x64_en-us.exe -o accessruntime_4288-1001_x64_en-us.exe
accessruntime_4288-1001_x64_en-us.exe /quiet /extract:C:\AccessRuntime
echo ^<Configuration Product="AccessRT"^> > accessruntime_4288-1001_x64_en-us.config
echo ^<Display Level="None" CompletionNotice="no" SuppressModal="yes" AcceptEula="yes" /^> >> accessruntime_4288-1001_x64_en-us.config
echo ^<Logging Type="standard" Path="C:\Windows\Temp\" Template="Microsoft_Access_2016_Runtime_Setup(*).log" /^> >> accessruntime_4288-1001_x64_en-us.config
echo ^<COMPANYNAME Value="Company Name" /^> >> accessruntime_4288-1001_x64_en-us.config
echo ^<Setting Id="SETUP_REBOOT" Value="Never" /^> >> accessruntime_4288-1001_x64_en-us.config
echo ^</Configuration^> >> accessruntime_4288-1001_x64_en-us.config
del C:\Windows\Temp\Microsoft_Access_2016_Runtime_Setup*.log
cmd /C C:\AccessRuntime\setup.exe /config C:\accessruntime_4288-1001_x64_en-us.config
echo Access Runtime Setup exited with code: %errorlevel%, See below for logs:
findstr /spin CAInstallLicenses C:\Windows\Temp\Microsoft_Access_2016_Runtime_Setup*.log

Для удобства чтения, это конфигурация, которую сценарий генерирует как ввод:

<Configuration Product="AccessRT">
<Display Level="None" CompletionNotice="no" SuppressModal="yes" AcceptEula="yes" />
<Logging Type="standard" Path="C:\Windows\Temp\" Template="Microsoft_Access_2016_Runtime_Setup(*).log" />
<COMPANYNAME Value="Company Name" />
<Setting Id="SETUP_REBOOT" Value="Never" />
</Configuration>

Вот вывод:

Access Runtime Setup exited with code: 1603, See below for logs:

C:\Windows\Temp\Microsoft_Access_2016_Runtime_Setup(2020022408475199C).log:9975:2020/02/24 08:49:01:598::[1176] MSI(ACTIONSTART): 'Action 8:49:01: PrepareCAInstallLicenses. '
C:\Windows\Temp\Microsoft_Access_2016_Runtime_Setup(2020022408475199C).log:9976:2020/02/24 08:49:01:598::[1176] MSI(INFO): 'Action start 8:49:01: PrepareCAInstallLicenses.'
C:\Windows\Temp\Microsoft_Access_2016_Runtime_Setup(2020022408475199C).log:9977:2020/02/24 08:49:01:614::[1176] MSI(INFO): 'PrepareCAInstallLicenses:  OMSICA : Initializing CustomAction PrepareCAInstallLicens
es'
C:\Windows\Temp\Microsoft_Access_2016_Runtime_Setup(2020022408475199C).log:9978:2020/02/24 08:49:01:630::[1176] MSI(INFO): 'PrepareCAInstallLicenses:  PHN license not supplied for ACID: 9D9FAF9E-D345-4B49-AFC
E-68CB0A539C7C'
C:\Windows\Temp\Microsoft_Access_2016_Runtime_Setup(2020022408475199C).log:9979:2020/02/24 08:49:01:630::[1176] MSI(INFO): 'PrepareCAInstallLicenses:  RAC-Private license not supplied for ACID: 9D9FAF9E-D345-
4B49-AFCE-68CB0A539C7C'
C:\Windows\Temp\Microsoft_Access_2016_Runtime_Setup(2020022408475199C).log:9980:2020/02/24 08:49:01:630::[1176] MSI(INFO): 'PrepareCAInstallLicenses:  RAC-Public license not supplied for ACID: 9D9FAF9E-D345-4
B49-AFCE-68CB0A539C7C'
C:\Windows\Temp\Microsoft_Access_2016_Runtime_Setup(2020022408475199C).log:9981:2020/02/24 08:49:01:645::[1176] MSI(INFO): 'Action ended 8:49:01: PrepareCAInstallLicenses. Return value 1.'
C:\Windows\Temp\Microsoft_Access_2016_Runtime_Setup(2020022408475199C).log:10205:2020/02/24 08:49:09:708::[1176] MSI(ACTIONSTART): 'Action 8:49:09: CAInstallLicenses. '
C:\Windows\Temp\Microsoft_Access_2016_Runtime_Setup(2020022408475199C).log:10206:2020/02/24 08:49:09:708::[1176] MSI(INFO): 'Action start 8:49:09: CAInstallLicenses.'
C:\Windows\Temp\Microsoft_Access_2016_Runtime_Setup(2020022408475199C).log:10207:2020/02/24 08:49:09:723::[1176] MSI(INFO): 'Action ended 8:49:09: CAInstallLicenses. Return value 1.'
C:\Windows\Temp\Microsoft_Access_2016_Runtime_Setup(2020022408475199C).log:10275:2020/02/24 08:49:32:270::[1176] MSI(ACTIONSTART): 'Action 8:49:32: CAInstallLicenses. '
C:\Windows\Temp\Microsoft_Access_2016_Runtime_Setup(2020022408475199C).log:10276:2020/02/24 08:49:32:286::[1176] MSI(INFO): 'CAInstallLicenses:  OMSICA : Initializing CustomAction CAInstallLicenses'
C:\Windows\Temp\Microsoft_Access_2016_Runtime_Setup(2020022408475199C).log:10277:2020/02/24 08:49:32:302::[1176] MSI(INFO): 'CAInstallLicenses:  Populating the Token Store'
C:\Windows\Temp\Microsoft_Access_2016_Runtime_Setup(2020022408475199C).log:10278:2020/02/24 08:49:32:302::[1176] MSI(INFO): 'CAInstallLicenses:  Installing license: sl.ISSUANCE.CLIENT_ROOT'
C:\Windows\Temp\Microsoft_Access_2016_Runtime_Setup(2020022408475199C).log:10279:2020/02/24 08:49:32:302::[1176] MSI(INFO): 'CAInstallLicenses:  Error: Failed to open Token Store HResult: 0xc0020036. '
C:\Windows\Temp\Microsoft_Access_2016_Runtime_Setup(2020022408475199C).log:10280:2020/02/24 08:49:32:302::[1176] MSI(INFO): 'CustomAction CAInstallLicenses returned actual error code 1603 (note this may not b
e 100% accurate if translation happened inside sandbox)'
C:\Windows\Temp\Microsoft_Access_2016_Runtime_Setup(2020022408475199C).log:11247:2020/02/24 08:50:08:161::[1176] MSI(INFO): 'Property(S): CAInstallLicenses = **********'
C:\Windows\Temp\Microsoft_Access_2016_Runtime_Setup(2020022408475199C).log:11405:2020/02/24 08:50:08:208::[1176] MSI(INFO): 'Property(S): MsiHiddenProperties = CAInstallLicenses;CAInstallPidKey;DigitalProduct
ID;DPID;PIDKEY;VerifyProdReg'

Поиск этой ошибки заставляет меня полагаю, что это как-то связано с Windows или активацией Office. Но так как это контейнер Docker, как я могу решить эту проблему?

1 Ответ

2 голосов
/ 25 февраля 2020

После многих часов проб и ошибок и целого поиска rnet я с радостью могу сказать, что мне удалось успешно установить Access Runtime в контейнер Docker. Ответ на эту ветку привел меня в правильном направлении.

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

Во-первых, для записи я использую базовый образ ОТ mcr.microsoft.com/windows:1809-amd64, который можно развернуть до Azure. К сожалению, образ серверного ядра не подходит, потому что Access Database Engine (у меня была отдельная зависимость) не работает на ядре сервера.

Во-вторых, во время установки вы должны использовать USER ContainerAdministrator .

В-третьих, перед запуском setup.exe вы должны установить этот ключ реестра:

reg.exe add HKLM\System\CurrentControlSet\Services\sppsvc /v Start /t REG_DWORD /d 2 /f

Я не совсем знаю, что это делает, но имеет какое-то отношение к активации. Он переводит ОС в состояние, достаточное для установки Access Runtime. Этот фрагмент я получил в этом потоке.

По умолчанию значение равно 4, и это значение равно 2. После установки я не восстановил это значение до 4 и не протестировал его.

Другим важным моментом является то, что установка этого параметра реестра должна выполняться в операторе RUN до и независимо от RUN , который запускает setup.exe. Это связано с тем, что после установки требуется перезагрузка. Это означает, что вы не можете вручную проверить это самостоятельно из оболочки и должны использовать Dockerfile для тестирования этого сквозного.

В-четвертых, при запуске setup.exe вы должны запустить его в очень конкретном c way:

RUN cmd.exe /C setup.exe /config temp.log

Здесь важен дополнительный cmd.exe / C. Причина этого в том, что setup.exe запускает новую оболочку и немедленно возвращается, если у вас нет cmd.exe / C. Это означает, что действие немедленно возвращается к Docker, и оно переходит в странное состояние. Мне понадобилось время, чтобы понять это. cmd.exe / C позволяет достаточно подождать. На самом деле я использую PowerShell просто для большей уверенности:

$access_runtime_setup_process = Start-Process -FilePath 'cmd.exe' -ArgumentList \"/C $access_runtime_temp_directory\setup.exe /config $access_runtime_config_file\" -NoNewWindow -Wait -PassThru; `
if ($access_runtime_setup_process.ExitCode -ne 0) { `
    Write-Host \"PROCESS FAILED: $access_runtime_temp_directory\setup.exe (Exit Code: $($access_runtime_setup_process.ExitCode))\"; `
    exit 1; `
}

Наконец, я закончил установку ядра базы данных Access после Access Runtime. Я не тестировал наоборот, возможно, он тоже работает.

После установки Access Database Engine я сделал USER ContainerUser для восстановления пользователя.

Мне не нужно было устанавливать V C Runtime или. NET Framework, единственные вещи, которые мне нужно было установить, - это среда выполнения и ядро ​​базы данных.

Если кому-то еще придется столкнуться с болью используя устаревшее программное обеспечение, такое как Access, в контейнере Docker, надеюсь, это поможет вам!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...