除此之外,我的安装程序类没什么特别的。它安装Windows服务。但现在我需要提示用户输入一些信息并将信息传递给安装程序类,以便安装程序类可以更新app.config。
我在默认用户界面中添加了三个额外页面:
变量:
在“安装”自定义操作中,我将属性设置如下:
在安装程序类中,重写安装
public override void Install(IDictionary stateSaver)
{
base.Install(stateSaver);
// This is to display the Parameters
// It comes up blank. No Parameters.
System.Text.StringBuilder sb = new System.Text.StringBuilder();
foreach (string s in Context.Parameters.Keys)
{
sb.Append(s);
sb.Append(":");
sb.AppendLine(Context.Parameters[s]);
}
//throw new InstallException(sb.ToString());
//This returns TRUE.
//throw new InstallException(Context.Parameters.ContainsKey("MYPARAM1").ToString());
string x= Context.Parameters["MYPARAM1"];
if (string.IsNullOrEmpty(x))
{
throw new InstallException("Missing parameter 'MYPARAM1'");
}
<snip>
}
当应用程序运行时,MYPARAM1为空,所以我在最后看到了InstallException。
我在安装顶部添加了两个测试代码块。第一个,创建一个字符串,其中包含应该在命令行中输入的所有参数。我根本没有得到我的参数。第二个块报告“TRUE” - 意味着键“MYPARAM1”在命令行上。第一个和第二个块不同意。怎么会这样?
作为实验,我尝试将字符串更改为/ MYPARAM1而不是MYPARAM1。这没有用。
答案 0 :(得分:1)
第一步是创建详细日志以查看传递给自定义操作的完整命令行。用于创建日志的命令:msiexec /i "C:\MyPackage\Example.msi" /L*V "C:\log\example.log"
在日志中,您可以搜索属性名称,以查看它们是否已正确设置,并且还会传递给您的自定义操作。