Как мне заполнить ComboBox во время установки в WiX?

Редактировать: яобновил код ниже, чтобы он теперь работал, благодаря РобуС ответом. Я

нашел пару страниц, которые показывают, как это сделать (http://www.cmcrossroads.com/content/view/13160/120/,http://www.mail-archive.com/[email protected]/msg05103.html) и просмотрел исходный код WAI (http://wai.codeplex.com/), Но я могу'Кажется, он работает в моем инсталляторе независимо от того, что я пытаюсь. Если кто-нибудь может определить, что яя делаю не такБуду очень признателен. Мой фрагмент WiX для диалога выглядит так:


  

...snip...

    

...snip...

    
    
      
        
      
    
  


Dummy



  

Мой код пользовательского действия:

[CustomAction]
public static ActionResult FillWebsiteNameList(Session xiSession)
{
  xiSession.Log("Begin FillWebsiteNameList");

  xiSession.Log("Opening view");

  View lView = xiSession.Database.OpenView("SELECT * FROM ComboBox");
  lView.Execute();

  xiSession.Log("Creating directory entry");

  DirectoryEntry lIis = new DirectoryEntry("IIS://localhost/w3svc");

  xiSession.Log("Checking each child entry");

  int lIndex = 1;
  foreach (DirectoryEntry lEntry in lIis.Children)
  {
    if (lEntry.SchemaClassName == "IIsWebServer")
    {
      xiSession.Log("Found web server entry: " + lEntry.Name);

      string lWebsiteName = (string)lEntry.Properties["ServerComment"].Value;
      xiSession.Log("Website name: " + lWebsiteName);

      xiSession.Log("Creating record");
      Record lRecord = xiSession.Database.CreateRecord(4);

      xiSession.Log("Setting record details");
      lRecord.SetString(1, "IIS_WEBSITENAME");
      lRecord.SetInteger(2, lIndex);
      lRecord.SetString(3, lEntry.Name); // Use lWebsiteName only if you want to look up the site by name.
      lRecord.SetString(4, lWebsiteName);

      xiSession.Log("Adding record");
      lView.Modify(ViewModifyMode.InsertTemporary, lRecord);

      ++lIndex;
    }
  }

  xiSession.Log("Closing view");

  lView.Close();

  xiSession.Log("Return success");

  return ActionResult.Success;
}

Раньше было две проблемы:

1) Приведенный выше код не удался во время выполнения пользовательского действия с "Функция не выполнена во время выполнения. База данных: не удалось обновить таблицы. " - Это произошло из-за проблемы с индексацией, из-за которой код пытался записать строку в столбец int.

2) Если я поменяю строку

lRecord.SetString(2, lWebsiteName);

в

lRecord.SetString(2, lEntry.Name);

затем, глядя на трассировку, действие кажется успешным, но при запуске установщика у выпадающего списка нет записей для выбора.

Если я изменю в выпадающем списке жестко закодированные значения, все будет хорошо, даже если я жестко закодировал эквивалент lWebsiteName.

Ответы на вопрос(2)

Ваш ответ на вопрос