Я определил пользовательское действие для сканирования компьютеров локальной сети.Это действие объявляется немедленным и запускается после нажатия диалогового окна пользователя:
<CustomAction Id="actionGetNetworkComputers" BinaryKey="actionBinary" DllEntry="GetNetworkComputers" Execute="immediate" Return="check"/>
Код действия Custiom:
public static ActionResult GetNetworkComputers(Session session)
{
ListNetworkComputers.NetworkBrowser nb = new ListNetworkComputers.NetworkBrowser();
Microsoft.Deployment.WindowsInstaller.View lView = session.Database.OpenView("DELETE FROM ComboBox WHERE ComboBox.Property='SERVER_LIST'");
lView.Execute();
lView = session.Database.OpenView("SELECT * FROM ComboBox");
lView.Execute();
int Index = 1;
try
{
foreach (string s in nb.getNetworkComputers())
{
Record lRecord = session.Database.CreateRecord(4);
lRecord.SetString(1, "SERVER_LIST");
lRecord.SetInteger(2, Index);
lRecord.SetString(3, s);
lRecord.SetString(4, s);
lView.Modify(ViewModifyMode.InsertTemporary, lRecord);
++Index;
}
}
catch (Exception ex)
{
session.Log(ex.StackTrace);
}
lView.Close();
return ActionResult.Success;
}
С этим связаны 2 основные проблемы:
Действие блокируется, поэтому окно установщика останавливается, пока nb.getNetworkComputers не перезапустится.Если я объявляю action return asyncWait, действие выполняется, но извлеченные значения не вставляются в ComboBox.Кроме того, мне нужна метка, обозначающая ход выполнения операции, например: «Сканирование сети, пожалуйста, подождите» и скрытие этой метки после завершения сканирования.
Возможно ли это с помощью wix?Любые советы?