【发布时间】:2012-02-14 14:13:30
【问题描述】:
我已经定义了扫描局域网计算机的自定义操作。此操作被声明为立即并在用户单击对话框按钮后触发:
<CustomAction Id="actionGetNetworkComputers" BinaryKey="actionBinary" DllEntry="GetNetworkComputers" Execute="immediate" Return="check"/>
自定义操作代码:
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 可以吗?有什么建议吗?
【问题讨论】:
标签: c# wix windows-installer wix3.5