我在其中一个对话框上有一个带ListBox和Add / Remove按钮的安装程序。 ListBox的项目通过我的CA添加和删除。
Microsoft.Deployment.WindowsInstaller.View listBoxView = session.Database.OpenView("select * from ListBox where Property = '" + listBoxProperty + "'");
listBoxView.Execute(null);
int count = 0;
while (listBoxView.Fetch() != null)
count++;
Record newListBoxRecord = new Record(4);
newListBoxRecord[1] = listBoxProperty;
newListBoxRecord[2] = ++count;
newListBoxRecord[3] = listItemValue;
newListBoxRecord[4] = listItemValue;
ICollection<ValidationErrorInfo> errors = listBoxView.ValidateNew(newListBoxRecord);
if (errors == null)
listBoxView.Modify(ViewModifyMode.InsertTemporary, newListBoxRecord);
项目成功添加和删除,但稍后我需要将它们存储在应用程序配置文件中。 Deffered操作无法访问Installer Database,因此我在InstallFinalize之后使用了Immediate action。但是当我读ListBox表时它是空的。我认为它是因为InsertTemporary修改模式而发生的。插入模式给我“执行期间功能失败。数据库:表格更新失败。”错误。
答案 0 :(得分:0)
当您离开此向导页面时,将列表保存到具有分隔符的属性。
延迟操作可以访问特殊属性CustomActionData
,以便您可以在安装阶段将它们写入配置文件。
在InstallFinalize
之后使用立即操作有一个不能写入受保护系统区域的缺点,例如Program Files。只能延迟执行延迟操作。