Wix light.exe:错误LGHT0001:系统无法打开指定的设备或文件。

时间:2014-05-30 03:23:29

标签: wix

今天我们用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

1 个答案:

答案 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打开为只读,而不是读取和编辑模式。

我们测试通过。