【问题标题】:Get user input during installation using setup project and use it in installer在安装期间使用安装项目获取用户输入并在安装程序中使用它
【发布时间】:2018-04-11 20:04:55
【问题描述】:
我创建了一个安装程序来安装 Windows 服务。安装程序应要求用户命名服务。因此,我使用TextBox 在安装程序中创建了一个自定义 UI。
当用户运行 setup.exe 文件时,安装开始并显示自定义 UI。用户添加了 Windows 服务的名称,但我应该如何在安装过程中将ServiceName 作为用户输入,并将默认服务名称设置为用户在安装过程中在该自定义 UI 中提供的服务名称。
【问题讨论】:
标签:
.net
winforms
service
setup-project
【解决方案1】:
您需要按照以下步骤操作:
- 创建一个 Windows 服务项目。它将创建一个包含
Service1.cs 的服务项目。
- 打开
Service1.cs 并右键单击并选择添加安装程序。它将创建一个ProjectInstaller.cs。
- 添加一个新的安装项目。 (如果您没有项目模板,请从此处下载并安装 VS2013、VS2015 或 VS2017)
- 将服务项目的主要输出添加到设置项目。
- 在安装文件夹之后使用TextBoxes (A)模板转到用户界面窗口和一个新对话框。 (将除
Edit1 之外的其他文本框的可见属性设置为false。)
- 转到自定义操作窗口并从服务项目的主要输出中添加一个新的自定义操作。
- 在 Custom Action 窗口中,转到此节点 转到此节点 Custom Actions → Install → WindowsService1 的主要输出 并在 Properties 窗口中,将
CustomActionData 的值设置为 /SVCNAME=[EDITA1]。
-
在您的服务项目中打开ProjectInstaller.cs 并覆盖Install 以设置服务的Name 或DisplayName:
public override void Install(IDictionary stateSaver)
{
string value = Context.Parameters["SVCNAME"];
this.serviceInstaller1.DisplayName = value;
base.Install(stateSaver);
}
然后构建您的项目并安装服务。