这类的文章网上非常少,每一篇都是我的良师益友,我看了十几篇资料,再自己反复测试,总算达成目的。
目的:在安装程序时,要求选择设备类型,以及炉管数量。后续打开程序会自己读取安装的选择,配置对应的功能。
我用的vs2019
第一步:先安装InstallerProjects(2019).vsix,这个教程很多,我就略过。
第二步:在解决方案资源管理器中,鼠标右键“解决方案”,添加--新建项目--类库;然后将Class1.cs删除。
第二步:鼠标右键类库名称,添加--新建项--安装程序类;他会帮你生成一个继承自Installer的类。
第三步:在解决方案资源管理器中,鼠标右键“解决方案”,添加--新建项目--Setup Project;创建安装项目。
第四步:鼠标右击安装项目名称,依次选择view--文件系统,会弹出如下界面:
鼠标右键Application Folder,依次点 Add-项目输出,把在项目这里看得到的都分别生成一下主输出,就会得到如上图所示的结果。
第五步:鼠标右击安装项目名称,依次选择view--自定义操作,会弹出如下界面:
右击Install,添加自定义操作,在弹出的对话框中,选中Application Folder,点OK
然后依次把这2个主输出都添加进去,结果如图
------------------------------------------------------------------------
第六步:鼠标右击安装项目名称,依次选择view--用户界面,会弹出如下界面:
下图标红的是我创建的2个属性,鼠标右键这2个项目,在属性中可以对画面上的文字进行设置。
最主要的是ButtonProperty这个属性名要注意,后续调用会用到。
第七步:鼠标右击安装项目名称,依次选择view--自定义操作,在Install下选择安装类库的那个主输出,右键--属性窗口,找到CustomActionData,按下面的语法写好
//使用方法以斜杠开头,后接参数名,引号类是自定义操作中的字段名,有多个参数中间用空格隔开。这下面的所有字母都是你自己取的,=号前是取属性值时用,=号后是输入属性值时用。
GuanNum="[BUTTON2]" /SbName="[BUTTON3]" /targetdir="[TARGETDIR]\"
第八步:代码部分,打开类库中那个安装程序类Install1.cs,参照我的源代码,同时查看我的注释说明。
public Installer1()
{
InitializeComponent();
this.BeforeInstall += new InstallEventHandler(InstallerTest_BeforeInstall);
//this.AfterInstall += new InstallEventHandler(InstallerTest_AfterInstall);
}
private void InstallerTest_BeforeInstall(object sender, InstallEventArgs e)
{
//以下三行代码就是获取安装时用户输入的数据,双引号内的名称对应CustomActionData
//使用方法以斜杠开头,后接参数名,引号类是自定义操作中的字段名,有多个参数中间用空格隔开。
///GuanNum="[BUTTON2]" /SbName="[BUTTON3]" /targetdir="[TARGETDIR]\"
path = this.Context.Parameters["targetdir"];
sbName = this.Context.Parameters["SbName"];
guanNum = this.Context.Parameters["GuanNum"];
writeMessage();//将获取的值写入安装目录下的文件中
}
private void writeMessage()
{
string selectText = sbName + "," + guanNum;
string path = Installer1.path;//获取应用程序安装路径
string fileName = path + "\\Test.txt";
try
{
using (FileStream fs = new FileStream(fileName, FileMode.OpenOrCreate, FileAccess.Write, FileShare.ReadWrite))
{
fs.SetLength(0);
using (StreamWriter sw = new StreamWriter(fs))
{
sw.WriteLine(selectText);
sw.Close();
fs.Close();
}
}
}
catch { }
}
对本笔记有不懂的地方,欢迎留言。