今天我们用MSBuild / m构建我们的产品,用多进程构建。
在我们进行更改以在预构建事件中加热某些文件之前,使用MSBuild多进程构建可能会成功。
现在构建失败并出现以下异常:
124> light.exe:错误LGHT0001:系统无法打开指定的设备或文件。 (来自HRESULT的异常:0x8007006E)[... MSI.wixproj]
Exception Type: System.IO.FileLoadException Stack Trace: at Microsoft.Tools.WindowsInstallerXml.MergeMod.IMsmMerge2.OpenModule(String fileName, Int16 language) at Microsoft.Tools.WindowsInstallerXml.Binder.MergeModules(String tempDatabaseFile, Output output, FileRowCollection fileRows, StringCollection suppressedTableNames) at Microsoft.Tools.WindowsInstallerXml.Binder.BindDatabase(Output output, String databaseFile) at Microsoft.Tools.WindowsInstallerXml.Binder.Bind(Output output, String file) at Microsoft.Tools.WindowsInstallerXml.Tools.Light.Run(String[] args)
(链接目标) - > light.exe:错误LGHT0001:系统无法打开指定的设备或文件。 (来自HRESULT的异常:0x8007006E)[... Msi.wixproj]
使用Wix 3.8
答案 0 :(得分:2)
经过团队调查后,我们找出了根本原因。 ProductMSI.sln有超过50个MSI wix项目和所有共享的MSM项目。
每个MSI项目都有一个post build事件操作,它将重新打开MSI相关的MSM,以便通过WindowsInstaller API作为DataBase对MSI进行一些更改。它通过API打开MSM作为读取和编辑模式。
因此,如果一个共享的MSM由一个MSI post事件打开,并且将被另一个wix项目打开以进行编译。开放请求将被拒绝。将抛出上述错误。
解决方案: 1.更改事件后操作以将MSM打开为只读,而不是读取和编辑模式。
我们测试通过。