WIX - 从后台立即自定义操作更改对话框文本标签

时间:2012-02-14 14:13:30

标签: c# wix windows-installer wix3.5

我已定义扫描局域网网络计算机的自定义操作。此操作被声明为立即并在用户单击对话框按钮后触发:

<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;       
}

这有两个主要问题:

操作正在阻止,因此安装程序窗口会冻结,直到nb.getNetworkComputers重新出现。如果我将操作返回声明为asyncWait,则会执行操作,但检索到的值不会插入到ComboBox中。另外,我需要一些指示操作进度的标签,例如:“扫描网络,请稍候”并在扫描结束后隐藏此标签。

wix有可能吗?有什么提示吗?

1 个答案:

答案 0 :(得分:0)

我认为解决此问题的最佳方法是安排CA是同步检查退出代码并让您的CA显示自己的模式对话框,并带有取消按钮,告诉您扫描正在进行中。然后使用BackgroundProcess类来旋转扫描,同时检查是否选择了取消。完成后(真实或取消)设置状态属性并返回成功。

然后在您的MSI控件事件中,您可以检查该属性,并根据您的业务规则禁止转换到下一个对话框或允许它(互斥控件事件条件)。

相关问题