如何在 Docker 容器上安装 Access Runtime?

2024-01-01

我想在 Docker 容器上安装 Access Runtime,但这样做时遇到了失败。以下是重现错误的基本命令。

首先使用新的 Windows 容器启动交互式 shell:

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容器,我该如何解决这个问题呢?


经过很多个小时的反复试验和互联网搜索,我可以很高兴地说我成功地将 Access Runtime 安装在 Docker 容器上。的回应这个线程 https://answers.microsoft.com/en-us/windows/forum/windows_10-windows_install/problem-activation-error-0xc0020036-windows-10/85126b3c-8476-4310-83bf-4d9c7801d39b引导我走向正确的方向。

太阳、月亮和星星必须全部对齐才能使其发挥作用,所以我希望这个答案对将来的人有所帮助。

首先,作为记录,我使用的是基础图像来自 mcr.microsoft.com/windows:1809-amd64,可部署到 Azure。不幸的是,服务器核心映像不是一个选项,因为 Access 数据库引擎(我拥有的一个单独的依赖项)不适用于服务器核心。

其次,在安装过程中您必须使用用户容器管理员.

第三,在运行 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。这是因为设置后需要重新启动。这意味着无法单独从 shell 手动测试这一点,而必须使用 Dockerfile 来进行端到端测试。

第四,启动 setup.exe 时,您必须以非常特定的方式启动它:

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

这里重要的是额外的cmd.exe /C。原因是如果您没有 cmd.exe /C,setup.exe 会启动一个新的 shell 并立即返回。这意味着该操作立即返回给 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 数据库引擎。我没有测试相反的方法,它可能也有效。

安装 Access 数据库引擎后,我做了一个USER 容器用户来恢复用户。

我不需要安装 VC Runtime 或 .NET Framework,我唯一需要安装的是运行时和数据库引擎。

如果其他人最终不得不经历在 Docker 容器中使用 Access 等遗留软件的痛苦,我希望这对您有所帮助!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 Docker 容器上安装 Access Runtime? 的相关文章

随机推荐

  • Java 读取文件行并仅提取有用的信息

    我有文件 file1 file2 包含以下内容 2017 02 01 10 00 00 start running error yes doing no finish remind alarmno 123456789 logno 12345
  • 使用最大行长度简洁地序列化 JSON

    因此 我正在生成一个可能很长的 JSON 字符串 以便在 Sendgrid 的 SMTP API 中使用 因为它作为 SMTP 标头 所以它应该具有最大行长度 建议 72 但绝对不超过 1000 文档末尾描述了一种简单的解决方案 http
  • 端点 SWS 没有适配器

    我正在尝试使用创建一个简单的 Hello World WebServicethis http static springsource org spring ws sites 2 0 reference html tutorial html教
  • 在 Android 中格式化 EditText 的电话号码

    我正在制作一个简单的地址簿应用程序 针对 4 2 它需要姓名 地址 城市 州 邮政编码和电话 我想将输入的电话号码格式化为电话号码 XXX XXX XXXX 但我需要将值作为字符串取出 以便在保存时可以将其存储在数据库中 我怎样才能做到这一
  • 从 Internet Explorer 检索所有 cookie

    我正在尝试检索与我打开的特定页面 我已经通过身份验证 关联的所有 cookie 有多个与该网页关联的 cookie 我需要检索每个 cookie 以便稍后进行 POST 我尝试了几种方法 但没有一个给我完整的列表 到目前为止 我已经用 VB
  • 如何在 VS Code 中调试 scala sbt 项目

    我正在尝试在 vs code 中调试 sbt 项目 我已经下载了 VS Code 扩展名 scala Metals 如何在 scala Metal 中显式添加 build sbt 文件夹路径 如何在 scala Metal 中显式添加 bu
  • D3 非连续日期域在 X 轴上产生间隙

    我想绘制一些不连续的时间序列数据 周末 假期等日期的间隙 这是每日数据 数据看起来像这样 date value 1 2 15 109 33 1 5 15 106 25 1 6 15 106 26 1 7 15 107 75 1 8 15 1
  • 忽略Excel求和公式中的隐藏列

    我基本上想忽略Excel中的随机列 有没有办法检测某列是否隐藏 然后不在公式中包含该列 例子是 F1 B1 C1 E1 忽略D列 但第二天 F 栏可能需要 B D E 来代替 有没有办法简单地实现这一目标 我见过一些忽略特定列的公式 但没有
  • 如何检查 Magento 产品是否已添加到购物车?

    我想在 Magento 中首次将产品添加到购物车时显示弹出窗口 并且不想在再次添加或更新产品时显示弹出窗口 简而言之 我想知道将要添加到购物车中的产品是第一次出现还是不是第一次出现 答案很大程度上取决于您想要如何处理父 子类型产品 如果需要
  • 同一应用程序中可以加载不同版本的 DLL 吗?

    我的应用程序使用一个版本的库 a dll 我使用另一个 DLL b dll 它又使用我使用的同一库 a dll 的旧版本 我正在通过嵌入清单文件来构建应用程序 我使用的 DLL 也使用嵌入式清单文件 我的 WinSXS 文件夹中有两个版本的
  • 无法访问 Heroku 上的作曲家供应商文件夹

    我在 Heroku 上托管一个 PHP 应用程序 它使用 Composer 安装 Bootstrap 当我将应用程序部署到 Heroku 时 所有 Composer 依赖项都按预期安装在 vendor 子目录中 我现在尝试将 Bootstr
  • 是否有任何有效的用例可以在现代 C++ 中使用 new 和 delete、原始指针或 c 样式数组?

    这里有一个值得注意的video 停止教学C https www youtube com watch v YnWhqhNdYyk关于 C 语言教学中范式的改变 还有一篇值得注意的博客文章 我有一个梦想 http dev jungle blog
  • 如何打开 Outlook 新邮件窗口 C#

    我正在寻找一种方法在 Outlook 窗口中打开新邮件 我需要以编程方式填充 从 到 主题 正文信息 但保持此新邮件窗口打开 以便用户可以验证内容 添加内容 然后作为正常的 Outlook 消息发送 发现 Process Start Str
  • 排序后 QTableWidget 的填充不完整

    我有一个 QTableWidget 它将填充一些随机值 该表已启用排序 tableWidget setSortingEnabled True 排序工作正常 我知道 在这个最小的例子中 它将是按字母数字排序的数字 但是 当我按一列对表格进行排
  • 致命错误:未捕获反射异常:类配置不存在

    我正在 Laravel 5 8 上开发一个电子商务项目 但由于我不小心在项目文件夹上运行了 laravel new 命令 当我尝试在本地服务器上启动该项目时 我收到此错误 致命错误 未捕获的 ReflectionException C wa
  • GROUP BY 中选择了哪一行?

    假设我有一张桌子 lang title url pt Livro 1 o294jl en Book 1 o294jl en Book 2 o294jl 我运行一个查询 SELECT lang title FROM table GROUP B
  • java.lang.ClassCastException:在 java 1.6 中,java.lang.Long 无法转换为 java.lang.Integer

    就连我也在选角Object到 int 中 但是出现这个异常 实际上我的 Hibernate JPA 方法是 returnObject然后我将其转换为Object into int 这是我的休眠代码 Transactional public
  • 如何在 Vim 中折叠 C++ 风格的注释?

    Vim 中的语法折叠可以轻松地为区域创建折叠 可以使用正则表达式定义折叠的开始和结束 syn 区域 myRegion start region end endregion 透明 keepend 扩展折叠 但是 我不确定如何使用语法折叠来定义
  • 捕获一个字符串,然后匹配以该字符串开头的所有其他单词

    我有一个包含 80 000 多个单词的列表 每个单词都用换行符分隔 我需要匹配每个包含较小单词作为前缀的单词 例如 bald lt captures bald balder lt matches because it starts with
  • 如何在 Docker 容器上安装 Access Runtime?

    我想在 Docker 容器上安装 Access Runtime 但这样做时遇到了失败 以下是重现错误的基本命令 首先使用新的 Windows 容器启动交互式 shell docker container run it mcr microso