VS2019 制作安装盘 自定义 操作

我们在制作安装盘的时候,有的时候需要做一些检测,比如我们的软件需要依靠第三方软件,需要提前做一些检测。如果系统没有安装,就自动执行安装程序进行安装。
1.首先,完成该功能需要VS2019先安装MicroSoft Visual Studio Install Projects工具,这样我们才能制作安装盘。首先需要创建一个set up项目,后面需要该安装项目的“自定义安装”Editor对话框中设置自定义操作。
在该安装项目的"文件系统"对话框中设置你要拷贝到机器上文件和目录。注意,此时的目录都是相对于用户安装时选择的安装目录的。如果你要添加一个文件夹。可以在文件管理器中拷贝后,直接在“文件系统”对话框中的对应位置黏贴,带来的问题是,未来你如果改主意不想将该目录部署到客户机器上。那么得从最深层开始一层层把文件删除干净才可以。
2.然后,我们要在项目中新增加一个项目(选择“类库**(.net framework)**”,这个是为了生成以后的dll,用于介入安装过程)。在这个项目中,新增加一个类,这个类必须是“安装程序类”。然后,为BeforeInstall,AfterInstall,Commiting,Commited等消息添加响应函数。做相关检查,执行安装操作等。这个安装程序类派生自.net提供的Installer类。
生成dll后,在安装项目的“自定义安装”中将其加入到安装工程的输出目录,setup就可以调用在安装时执行相关操作。
3.还可以自己制作一个进行相关操作的exe执行文件,进行和dll类似的相同操作,只不过要设置下相关的属性即可。(installerclass),exe为False,dll为True。
4.我们在上述dll的某个重载函数启动我们需要的安装程序,这个安装程序我们在安装项目的文件系统中已经添加到对应的位置。如果我们想在这个dll中找到该位置,必须在安装项目的自定义界面设置dll的对应参数。将CustomActionData设置为/targetdir="[TARGETDIR]",这样我们在dll的程序中可以通过string setupSourcePath = this.Context.Parameters[“targetdir”];来自动获得用户设置的安装目录。利用相对位置启动你所需的安装程序。

 string setupSourcePath = this.Context.Parameters["targetdir"];
//获取的安装路径中最后一个子目录分割符"\"多了一个"\",该参数在使用这个dll的安装项目中设置
setupSourcePath = setupSourcePath.Replace(@"\\", @"\");
string FortranSetupSourcePath = setupSourcePath + @"software\FORTRAN\simplyfortran-2.17.msi";
Process process = new Process();
process.StartInfo.FileName = FortranSetupSourcePath;
process.Start();
process.WaitForExit();

5.通常,windows不允许同时启动两个安装进程,而且我们需要的第三方程序的安装盘已经拷贝到目标目录。所以,我这里是在安装dll中的Commited()的函数中进行的第三方软件的安装。Commited()函数调用点在你的安装程序最后弹出确认对话框之前。此时文件都已经部署到位,感觉这个安装进程已经不会和第三方安装进程冲突了。亲测有效。

private void MyInstaller_Commited(Object sender,InstallEventArgs e)
{
    if (!checkIfSWInstalled("Simply Fortran 2"))
    {
        MessageBox.Show("开始安装Fortran");
        installFortran();
    }
    if (!checkIfTCLInstalled())
    {
        MessageBox.Show("开始安装TCL");
        installTCL();
    }
}

6.有个需要注意的地方是,如果你安装时使用的是系统缺省目录,也就是C:\Program File(x86)\目录下安装你的程序。此时由于路径中有空格,使用过程中你有可能会找不到你所需要的安装盘路径。此时要在包含空格的路径两端加上“”。

string commandName = @"move " + "\""+TCLSetupSourcePath+ "\"" + @" c:\";

7.如果你自己设计了一个对话框,想在安装的过程中使用。完成这个任务需要更专业的工具。如installsheld或wise。但我们可以在此安装工程中使用已经预先定义的对话框。这就要使用我们的安装工程的又一个编辑器“用户界面”。前面我们已经使用了“文件系统”和“用户自定义”两个编辑器,在这个编辑器中,我们可以为你的安装界面加入你公司标记,版权信息,欢迎信息等。(直接更改属性)你不编辑的话,VS会为你自动选择缺省的信息。
预先设置的对话框可以让你提示用户输入公司,姓名,序列号,以及license信息等等。还可以设置一些复选框,文本框。比如一些Condition属性设置为checkboxdemo的,那么只有在客户选择此框后,才会安装。

同时,这些编辑框里面的值,我们也可以在dll程序中获得,方法和获得安装路径类似。如何得到用户在安装的时候输入的更多的信息?用户在安装的时候,还有可能塡很多其他的信息,比如我以前做的一个安装文件中包含安装数据库,安装的时候用户就要填写数据库密码,用户名等信息。实现如下:用户界面->安装->启动->右键->添加对话框->选择"文本框(A)",可以看到文本框(A)有很多属性,如:Edit1Label,Edit1Property,Edit1Value,Edit1Visible等,Edit1Label就是這個输入框所要输入的内容的提示语,Edit1Value就是所输入的内容。 例如:将Edit1Label内容填上“请输入数据库用户名:”,将Edit1Property内容填上DBUSER,Edit1Visible选问true,另外在6中所提到的CustomActionData中,添加上 /dbuser="[DBUSER]",再在InstallerTest中用这句话this.Context.Parameters[“dbuser”] 就可以或得用户在安装的时候所填写的用户名了(其他的单选框,复选框,button按钮框都差不多获取值的方法,不再累赘).总之,添加了一些对话框后,把属性好,还要在CustomActionData添加一个/parm="[属性值]",才能在代码中获取改值。

附:安装盘制作过程中是要求安装Framework4.7.2的。但出现的dll为System.Net.Http.dll。怀疑这个dll是安装时检测客户机是否有运行库并下载对应运行库的。不确认,先存个疑。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值