如何编写一个 System.Configuration.Install.Installer 以从安装程序项目中获取变量?

7

我的解决方案中有两个项目:

  1. 一个Windows服务

  2. 该Windows服务的设置项目

我需要在ProjectInstaller : System.Configuration.Install.Installer的OnAfterInstall方法中获取设置项目的ProductName,请问如何实现?

1个回答

9
在您的设置项目中,右键单击项目,然后选择“查看”>“自定义操作”。添加自定义操作。现在选择“添加输出”,选择您的 Web 服务项目,然后单击“确定”。
现在选择您的自定义操作,并将 CustomActionData 属性设置为包含类似于 /ProductName=[PRODUCTNAME] /whateveryouwant=[Whateveryouwant] 的内容(请注意,这些是键值对;即要访问产品名称,ProductName 是键,而值是 PRODUCTNAME)。
请注意,CustomActionData 包含将传递给安装程序类的参数。 PRODUCTNAME 是与用户界面对话框中输入控件相关联的属性名称,在您的安装程序中提示用户输入产品名称。因此标签为“产品名称”,相应的属性应设置为 PRODUCTNAME(显然您可以更改此设置,但最重要的是要注意 UI 属性名称必须与 CustomActionData 中的属性名称相同),以使此示例工作。
现在,在您的安装程序类中,您可以通过执行以下操作来获取产品名称:
public override void Install(IDictionary stateSaver)
{
      // If you need to debug this installer class, uncomment the line below
      //System.Diagnostics.Debugger.Break();

       string productName = Context.Parameters["ProductName"].Trim();

       string whateveryouwant = Context.Parameters["whateveryouwant"].Trim();
}

请注意,我已经包括了注释代码//System.Diagnostics.Debugger.Break();,您可以取消注释以便调试安装程序类。

希望这能帮到您。


我遇到了2个问题:(1)它不起作用 (2)调试时出现以下提示:“由于当前方法的代码已经被优化,所以无法评估表达式。” - Jader Dias
我没有看到你的代码或者更多细节之前,无法确定问题所在。你遇到的错误是一个常见的错误,可能有很多原因。如果你愿意,可以给我发送一个简化版本的设置项目,我会看看是否能找出问题所在。 - Somedeveloper
1
@JaderDias 你可以尝试在调试模式下编译代码,而不是发布模式,这可能会有所帮助! - Peter

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接