Если кто-то захочет это сделать, я очень ценю это. Я пишу приложение для VB.NET, которое будет управлять коммерческим продуктом резервного копирования. Одна из вещей, которые мне нужно сделать, это просмотреть все существующие задания и посмотреть на исходный диск. Я могу сделать это в VBScript очень просто, как это:
Dim SP, BackupJob, volumes
Set SP = CreateObject("ShadowStor.ShadowProtect")
For Each Job In SP.Jobs
Set BackupJob = SP.Jobs.GetBackupJob(Job.Description)
BackupJob.GetVolumes volumes
For Each Volume in volumes
WScript.Echo volume
Next
Next
Set SP = Nothing
Однако ничего, что я пробую в VB.NET, не работает. Я почти уверен, что это связано с тем, что функции com возвращают различные типы данных и массивы (в частности, GetVolumes). Я пытался использовать строковые массивы, объектные массивы и даже переносить возвращаемое значение в VariantWrapper, и я всегда получаю ошибки, такие как «не реализовано» или «параметр неверен». Если кому-то скучно и он захочет написать какой-нибудь код, я с удовольствием предоставлю ему шанс и сообщу.
UPDATE:
Это странно. Посмотрите на этот код:
Dim SP As Object = CreateObject("ShadowStor.ShadowProtect")
Dim gotJob As Object
Dim volumes() As Object
Try
For Each Job As Object In SP.Jobs
gotJob = SP.Jobs.GetBackupJob(Job.Description.ToString())
gotJob.GetVolumes(volumes)
For Each volume As Object In volumes
MsgBox(volume.ToString())
Next
Next
Catch ex As Exception
MsgBox(ex.Message)
End Try
При этом отображается громкость из ОДНОГО задания, а затем происходит сбой, если имеется более одного задания с ошибкой «недопустимый вызываемый объект».