Как восстановить резервную копию метабазы ​​IIS с помощью C#

Я нашел вопрос о переполнении стека, описывающий, как сделать резервную копию метабазы ​​IIS на C# здесь, и мне удалось заставить это работать, используя код, на который ссылается здесь. Однако у меня возникают трудности с восстановлением этих резервных копий (или любых резервных копий, созданных вручную в IIS) с использованием кода С#.

Кто-нибудь знает, как это сделать, или даже если это можно сделать? Я не смог найти никаких примеров этого в Интернете, в отличие от самой резервной копии.

Я пробовал использовать следующий код, но получаю сообщение об ошибке 'Исключение было вызвано целью вызова'

using (DirectoryEntry localhostIIS = new DirectoryEntry("IIS://LocalHost"))
{
   localhostIIS.Invoke("Restore", new object[] { string.Empty, 0, 0});
}

Теперь, хотя я уверен, что вызываю метод с неправильным именем и/или структурой объекта, я нигде не смог найти правильный способ его вызова....

Может ли кто-нибудь указать мне в правильном направлении?


person JamesW    schedule 08.02.2010    source источник
comment
Когда вы открываете InnerException, какой код HRESULT вы получаете?   -  person Kev    schedule 08.02.2010
comment
Я получаю E_INVALIDARG 0x80070057.... значит ли это, что один из параметров неверен?   -  person JamesW    schedule 08.02.2010


Ответы (1)


Я попробовал это с именованной резервной копией и заставил это работать с некоторыми настройками:

const uint MD_BACKUP_HIGHEST_VERSION = 0xfffffffe;
const uint MD_BACKUP_NEXT_VERSION = 0xffffffff;
const uint MD_BACKUP_SAVE_FIRST = 2;

using(DirectoryEntry de = new DirectoryEntry("IIS://Localhost"))
{
  // Backup using the next version number (MD_BACKUP_NEXT_VERSION)
  de.Invoke("Backup", new object[] {
      "test-backup",
      MD_BACKUP_NEXT_VERSION,
      MD_BACKUP_SAVE_FIRST
  });

  // Restore the highest version number (or specify the specific version)
  de.Invoke("Restore", new object[] {
    "test-backup",
    MD_BACKUP_HIGHEST_VERSION,
    0
  });
}
person Kev    schedule 08.02.2010
comment
Великолепно! Большое спасибо - похоже, мне нужна была только константа MD_BACKUP_HIGHEST_VERSION :o) - person JamesW; 08.02.2010