如何在PowerShell中使用IMAPI2 IBurnVerification接口?

时间:2018-04-13 21:58:32

标签: c# powershell com imapi

我正在制作一个脚本,在PowerShell中使用IMAPI2刻录光盘上的图像。

我无法使用IBurnVerification界面设置BurnVerificationLevel,以便验证刻录。

我已将包含接口的Interop编译成dll,并从我的脚本since its apparently not in the system's dlls加载它。

所以我尝试在MsftDiscFormat2Data对象和IBurnVerification接口(MsftDiscFormat2Data实现IBurnVerification)之间进行转换,每次都会抛出此错误:

  

无法转换" System .__ ComObject" type" System .__ ComObject#{27354153-9f64-5b0f-8f00-5d77afbe261e}"输入" Storage.Interop.IMAPIv2   .IBurnVerification"

代码示例:

[System.Reflection.Assembly]::LoadFrom("path\FixedIMAPI2.dll")

$DiscFormatData = New-Object -com IMAPI2.MsftDiscFormat2Data

$BurnVerification = [Storage.Interop.IMAPIv2.IBurnVerification]$DiscFormatData

以下也没有让它起作用:

$DiscFormatData = New-Object Storage.Interop.IMAPIv2.MsftDiscFormat2Data

1 个答案:

答案 0 :(得分:0)

  

免责声明:我没有Power Shell的经验。我正在回答C#,假设类似的概念可能适用于您的技术。

我使用C#与IMAPI合作。我有你提到的类似问题(转换界面)。 C#中的转换接口为tricky;动力壳可能就是这种情况。在搜索解决方案时,我遇到了this帖子。以下是文章的引用:

  

使用两个独立的COM DLL实现IMAPI2:imapi2.dll和imapi2fs.dll。 imapi2.dll处理大多数设备和记录API,imapi2fs.dll处理所有文件系统和IStream API。这似乎不是什么大问题,特别是如果你使用的是C ++。这确实成为.NET的一个大问题,因为你需要从IMAPI2FS创建一个IStream并在IMAPI2中使用它来写入媒体。您最终收到错误消息,如下所示:

Unable to cast object of type 'IMAPI2FS.FsiStreamClass' to type 'IMAPI2.IStream'
     

Microsoft意识到了这个问题,并创建了一个名为IBurn的项目,他们在Windows Vista SDK中发布了这个项目。他们创建了一个Interop命名空间,它将IMAPI2和IMAPI2FS的许多类,枚举和接口组合到Interop.cs文件中的一个命名空间中。这解决了无法将IStream从IMAPI2FS转换为IMAPI2的问题。

除此之外,在帖子中提到的铸造时还有其他问题。我恐怕无法提供解决方案,但我希望阅读这篇文章可能会对你有帮助。