Как использовать IMAPI2 Интерфейс IBurnVerification в PowerShell?
Я делаю сценарий для записи изображения на диск с IMAPI2
в PowerShell.
Я не могу использовать IBurnVerification
интерфейс для того, чтобы установить BurnVerificationLevel
так что он проверит ожог.
Я скомпилировал Interop, содержащий интерфейс, в dll и загрузил его из моего скрипта, поскольку его, очевидно, нет в dll системы.
Поэтому я попытался бросить междуMsftDiscFormat2Data
возражать противIBurnVerification
интерфейс (MsftDiscFormat2Data
инвентарь IBurnVerification
) и это выдает мне эту ошибку каждый раз:
Невозможно преобразовать значение "System.__ComObject" типа "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 ответ
Отказ от ответственности: у меня нет опыта работы в Power Shell. Я отвечаю с точки зрения C#, предполагая, что подобная концепция может быть применима к вашей технологии.
Я работал с IMAPI с C#. У меня была похожая проблема (приведение интерфейсов), о которой вы упоминали. Приведение интерфейсов было сложно в C#; То же самое может быть в случае с оболочкой питания. В поисках решения я наткнулся на этот пост. Ниже приводится цитата из статьи:
IMAPI2 был реализован с использованием двух отдельных COM DLL: imapi2.dll и imapi2fs.dll. imapi2.dll обрабатывает большинство API-интерфейсов устройства и записи, а imapi2fs.dll обрабатывает все файловые системы и API-интерфейсы IStream. Это может показаться не большой проблемой, особенно если вы используете C++. Это действительно становится большой проблемой для.NET, потому что вам нужно взять IStream, созданный из IMAPI2FS, и использовать его в 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.
Помимо вышесказанного, есть другие проблемы при кастинге, упомянутые в посте. Боюсь, что не могу найти решение, но надеюсь, что чтение статьи может вам помочь.