我正在制作一个脚本,在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
答案 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的问题。
除此之外,在帖子中提到的铸造时还有其他问题。我恐怕无法提供解决方案,但我希望阅读这篇文章可能会对你有帮助。