C# 加载组合框wix时出错
我有一个C自定义操作,它将可用的服务器证书加载到组合框中。在我这方面一切正常,但安装程序无法在客户端系统上运行自定义操作。首先,我认为IIS端存在一些问题,但后来发现安装程序在加载到组合框时抛出错误 以下是我的C代码:C# 加载组合框wix时出错,c#,combobox,wix,windows-installer,C#,Combobox,Wix,Windows Installer,我有一个C自定义操作,它将可用的服务器证书加载到组合框中。在我这方面一切正常,但安装程序无法在客户端系统上运行自定义操作。首先,我认为IIS端存在一些问题,但后来发现安装程序在加载到组合框时抛出错误 以下是我的C代码: public static ActionResult ListCertificate(Session session) { session.Log("ListCertificate: Begin"); try
public static ActionResult ListCertificate(Session session)
{
session.Log("ListCertificate: Begin");
try
{
int Index = 1;
List<string> list = new List<string>();
X509Store certificateStore = new X509Store(StoreName.My, StoreLocation.LocalMachine);
certificateStore.Open(OpenFlags.OpenExistingOnly | OpenFlags.ReadWrite);
foreach (X509Certificate2 certificate in certificateStore.Certificates)
{
String ApplicationCertificate = certificate.FriendlyName;
list.Add(ApplicationCertificate);
}
certificateStore.Close();
List<string> DistinctCertificateList = list.Distinct().ToList();
View view = session.Database.OpenView("DELETE FROM ComboBox WHERE ComboBox.Property='APPLICATION_CERTIFICATE_NAME'");
view.Execute();
view = session.Database.OpenView("SELECT * FROM ComboBox");
view.Execute();
foreach (string DistinctApplicationCertificate in DistinctCertificateList)
{
if (!string.IsNullOrWhiteSpace(DistinctApplicationCertificate))
{
Record record = session.Database.CreateRecord(4);
record.SetString(1, "APPLICATION_CERTIFICATE_NAME");
record.SetInteger(2, Index);
record.SetString(3, DistinctApplicationCertificate);
record.SetString(4, DistinctApplicationCertificate);
view.Modify(ViewModifyMode.InsertTemporary, record);
}
Index++;
}
view.Close();
session.Log("ListApplicationCertificate: End");
}
catch (Exception ex)
{
Record record = session.Database.CreateRecord(2);
record.SetString(1, session["LISTCERTIFICATE_ERROR"]);
record.SetString(2, ex.Message);
session.Message(InstallMessage.FatalExit, record);
session["ERRORMSG"] = ex.Message;
session["ERRORSHOW"] = session["LISTCERTIFICATE_ERROR"];
session.Log("ListApplicationCertificate: exception: {0}", ex.Message);
return ActionResult.Failure;
}
return ActionResult.Success;
}
我的wix UI代码是:
<Control Id="ApplicationCertificateLabel" Type="Text" X="20" Y="190" Width="130" Height="15" TabSkip="no" Text="!(loc.ApplicationCertificateLabel)" />
<Control Id="ApplicationCertificateComboBox" Type="ComboBox" X="130" Y="185" Width="200" Height="18" Property="APPLICATION_CERTIFICATE_NAME" ComboList="yes">
<ComboBox Property="APPLICATION_CERTIFICATE_NAME">
<ListItem Text="[APPLICATION_CERTIFICATE_NAME]" Value="[APPLICATION_CERTIFICATE_NAME]" />
</ComboBox>
</Control>
我在详细日志中遇到以下错误:
'函数在执行过程中失败。数据库:。列2'中的更新数据类型无效
我已经搔头好几天了。请帮我整理一下
提前感谢。您能否澄清在客户端系统上运行自定义操作的含义。客户机系统是指我客户运行IIS的服务器,还是指运行客户机应用程序的PC?您应该捕获Exception.StackTrace以隔离导致错误的代码行。catch的编码方式意味着它几乎可以出现在任何地方,尝试找出导致错误的确切代码行!正如@PhilDW建议在view.ModifyViewModifyMode.InsertTemporary捕获异常一样,记录和As错误消息显示,我认为索引端存在一些问题。此外,第2列仅为索引。索引数据类型是这里的麻烦制造者吗。。?