WIX - изменить текстовую метку диалога с фонового немедленного пользовательского действия - PullRequest
1 голос
/ 14 февраля 2012

Я определил пользовательское действие для сканирования компьютеров локальной сети.Это действие объявляется немедленным и запускается после нажатия диалогового окна пользователя:

<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?Любые советы?

1 Ответ

0 голосов
/ 14 февраля 2012

Я думаю, что лучший способ сделать это - запланировать для CA код выхода Sync Check, и ваш CA должен отобразить свой собственный модальный диалог с кнопкой отмены, сообщающей, что сканирование выполняется. Затем используйте класс BackgroundProcess, чтобы прокрутить сканирование, проверяя, выбрана ли отмена. Когда все сделано (для реального или отмененного), установите свойство для состояния и верните успех.

Затем в своих событиях управления MSI вы можете проверить это свойство и запретить переход к следующему диалоговому окну или разрешить его (взаимоисключающие условия события управления) на основе ваших бизнес-правил.

...