我有一个 32 位应用程序的安装程序包(使用 MakeMsi 构建,最初是为 Windows XP 而简单维护的),它无法在现代(64 位)Windows 系统上注册 COM 服务器(7、8 , 10).这是我在尝试正常安装 MSI 时看到的:
Application Error
Exception EOleSysError in module xyz at 000F0B01. Error accessing the OLE registry.
如果我将 MSI 置于兼容模式 以前版本的 Windows,COM 服务器会成功注册。由于“它正在工作”不知何故,到目前为止我没有投入太多时间来探索原因。但最后,我厌倦了一次又一次地记住我们的客户(有时也是我)这个先决条件,所以我想解决这个问题。
注册(和注销)是通过 CustomAction 完成的,正如我使用 Orca 所看到的那样:
"[INSTALLDIR.MYAPP]\placeholder.exe" -regserver
"[INSTALLDIR.MYAPP]\placeholder.exe" -unregserver
对于每个条目,Type
是 1122
,Source
是 INSTALLDIR.MYAPP
。
我可以想象在安装过程中COM服务器是在权限不足的情况下启动的,但是安装程序不是以管理员权限自动运行的吗?我的意思是,当我(作为标准用户)通过双击启动安装程序时,它会在实际安装发生之前 显示 UAC 提示。为什么 COM 服务器不以注册和注销的提升权限运行?令人困惑...
我应该如何更改我的 MSI 以使 Windows 安装程序成功处理它?</strong>
最佳答案
我假设您知道问题出在您作为自定义操作运行的可执行文件中,而不是 Windows Installer 中的任何内容。这意味着问题将出在可执行文件中的代码,它可能是旧的并且与更高版本的操作系统不兼容。您需要查看代码以了解不受支持的功能。
许多安装不需要自行注册。该数据是所有静态数据,可以提取一次并包含在注册表项和其他 COM 类表中的 MSI 文件中。这意味着在安装过程中根本不需要运行代码。
关于windows - 避免让 MSI 进入兼容模式 "Previous version of Windows",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38739380/