C# winform 安装程序打包(自定义操作)
(一),安装程序
以前用vs制作过安装程序,现在把步骤写出来,有帮助的大家一定要顶哦
第一步:建立工程
1.打开vs,新建项目->其他项目类型->安装和部署(這個子项下面有安装项目和Web安装项目等,安装项目就是普通的桌面程序安装,Web安装就是安装网站,通常安装到IIS下,这里以普通桌面程序安装为例),新建安装项目,命名为SetupTest。
2.新建工程后,可以在“解决方案资源管理器”里面看到子项:文件系统编辑器,注册表编辑器,文件类型编辑器,用户界面编辑器,自定义操作编辑器,启动条件编辑器。下面将会举例来说明各个地方怎么使用。
3.最简单的一个安装程序:点击“文件类型编辑器”,找到“应用程序文件夹”,添加->文件,选择你要打包的程序文件(譬如我的程序有 run.exe和lib.dll组成),确定。在项目“SetupTest”上点击生成,一个简单的安装包就做好了。生成后,点击安装,如果没有错误的话,你现在可以看到你的安装包的效果了。
4.如何自定义代码?在制作过程中,这些简单的功能不能满足你的要求,那么就自己写代码来完成吧。
解决方案->添加->新建项目->类库,命名为Library,在项目Library下面,删除Class1.cs,添加 ->新建项目->安装程序类(名称为InstallerTest.cs),打开InstallerTest.cs,你会发现这个class InstallerTest继承自Installer,里面就一个构造函数。好了,现在安装程序不能完成的功能,你可以在这个类写代码来自己实现了。
举例:在构造函数里面添上this.BeforeInstall += new InstallEventHandler(InstallerTest_BeforeInstall),实现方法 InstallerTest_BeforeInstall(object sender, InstallEventArgs e),就可以完成程序在安装之前要做的事情了,Installer主要要用到的事件不外乎这几个:BeforeInstall,AfterInstall,AfterRollback,AfterUninstall,BeforeRollback,BeforeUninstall,很明显的意义,就不用解释了吧
//////////////////////////////////////////////////////////////////////////////安装文件实例代码(安装后执行批处理)///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
public InstallerTest()
{
InitializeComponent();
//this.BeforeInstall += new InstallEventHandler(InstallerTest_BeforeInstall);
this.AfterInstall+=new InstallEventHandler(InstallerTest_AfterInstall);
}
private void InstallerTest_AfterInstall(object sender, InstallEventArgs e)
{
//throw new ApplicationException("suc ok");
string path = this.Context.Parameters["targetdir"];
string command = path + "\\a.bat";
Process p = new Process();
p.StartInfo.FileName = "cmd.exe";
p.StartInfo = new System.Diagnostics.ProcessStartInfo(command);
p.StartInfo.UseShellExecute = false;
p.StartInfo.RedirectStandardInput = true;
p.StartInfo.RedirectStandardOutput = true;
p.StartInfo.CreateNoWindow = true;
p.Start();
p.StandardInput.WriteLine("exit");
p.Close();
}
////////////////////////////////////////////////////////////////////////////// END ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
5.完成了4中的InstallerTest_BeforeInstall方法,是不是在安装之前就要执行 InstallerTest_BeforeInstall中的代码呢,答案是不行。还要用到“自定义操作编辑器”。项目SetupTest->添加 ->项目输出->选择Library后确定,你会发现,在项目SetupTest下面多了一项“主输出来自Library(活动)”的字样。好,到正题了,来到“自定义操作”处,可以看到四个子项:安装,提交,回滚,卸载。在安装上面点击右键->添加自定义操作->选择“主输出来自Library(活动)”。这样,重新生成后,安装之前就会执行InstallerTest_BeforeInstall代码了。(当然,如果你在要在卸载前后做一些事情,就必须在“卸载”处也把自定义操作添加进去,否则即使监听了事件AfterUninstall,也不会执行的,完全之策是在安装,提交,回滚,卸载里面都把主输出来自Library(活动)添加进去就不怕了,嘿嘿)
6.如何得到用户所选安装路径?在实现代码的时候,用户所选安装路径大多数情况下都要用到,怎么得到他的值呢?在自定义操作->安装->“主输出来自Library(活动)”上面右键属性,在CustomActionData中填入/targetdir="[TARGETDIR]/",然后在类InstallerTest中用这句话this.Context.Parameters["targetdir"] 就可以取得安装的目录了。
7. 如何得到用户在安装的时候输入的更多的信息?用户在安装的时候,还有可能塡很多其他的信息,比如我以前做的一个安装文件中包含安装数据库,安装的时候用户就要填写数据库密码,用户名等信息。实现如下:用户界面->安装->启动->右键->添加对话框->选择"文本框 (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="[属性值]",才能在代码中获取改值。
8.其他:创建快捷方式,你可能在程序中要创建多个快捷方式,这里展示一种写代码的方式来创建快方式(各个选项意义就不说了,其中有些选项是可以不需要的,读者可自己测试选择使用)
添加引用:com名称为Windows Script Host Object Model
using IWshRuntimeLibrary;
string dk = System.Environment.GetFolderPath(System.Environment.SpecialFolder.Desktop);//得到桌面文件夹
IWshRuntimeLibrary.WshShell shell = new IWshRuntimeLibrary.WshShellClass();
IWshRuntimeLibrary.IWshShortcut shortcut = (IWshRuntimeLibrary.IWshShortcut)shell.CreateShortcut(@dk + "//快捷方式到数据中心SiteDataCenter.lnk");
shortcut = (IWshRuntimeLibrary.IWshShortcut)shell.CreateShortcut(@dk + "//互联网公共上网服务场所信息安全管理系统.lnk");
shortcut.TargetPath = @"%HOMEDRIVE%/Program Files/Internet Explorer/IEXPLORE.EXE";
shortcut.Arguments = "http://localhost/web/Main.html";// 参数
shortcut.Description = "火星网络安全有限责任公司";
shortcut.WorkingDirectory = pathWeb;//程序所在文件夹,在快捷方式图标点击右键可以看到此属性
shortcut.IconLocation = "notepad.exe, 0";//图标
shortcut.Hotkey = "CTRL+SHIFT+N";//热键
shortcut.WindowStyle = 1;
shortcut.Save();
9.如何在安装完成后自动运行某个程序呢(如run.exe)?
将这句代码写在AfterInstall里面:
System.Diagnostics.ProcessStartInfo psiConfig = new System.Diagnostics.ProcessStartInfo(path + "http://www.cnblogs.com/lmjob/admin/file://run.exe");//path 即是安装的目录
System.Diagnostics.Process pConfig = System.Diagnostics.Process.Start(psiConfig);
(二)卸载(以下是转的,看客自己提取有用信息)
1.新建一C# Windows From项目,完成项目的工作
2.菜单-》文件-》添加项目-》新建项-》安装部署项目-》安装向导
选择上面那个项目的主输出。
在安装项目的属性栏中会显示出"XXX部署项目属性",在第一个AddRemoveProgramsIcon属性后"浏览"到你的ICO图标,接着在下面Author输入作者名,也就是你的名字,其他Localization是语言属性,Manufacturer,ProductName的属性将是用户在安装时默认设置的文件夹路径一部分了,设置Title为你的应用程序标题名称。
3.右击"安装项目"上,选择文件系统视图
在应用程序文件夹,添加一个文件,如果是WIN98下的安装,请选择WIN98操作系统目录下的msiexec.exe文件(一般在 c:/windows/system目录下);如果是其他,比如WIN2K系列,请选择该操作系统目录下的msiexec.exe文件(一般在 /winnt/system32目录下)。
4.在文件系统视图的"用户程序菜单"里,添加一个目录,命名为项目的名字,
并且,在这个目录里,添加一个快捷方式,指向项目的主输出,
再添加一个快捷方式,指向加入的文件Msiexec.exe,命名为:"卸载",
5.在解决方案里,选择安装项目,再打开属性视图,打开安装项目的属性面板,里面有一项:
ProductCode {5284694C-24C1-4FCF-A705-D4B9A0081274}
把后面的{5284694C-24C1-4FCF-A705-D4B9A0081274},复制一下。
6.在"卸载"快捷方式的属性里,有一个叫Arguments的属性栏,在属性栏中首先填入"/x"后加一个空格,再"粘贴",将ProductCode的属性值COPY至此。
7、再在VS.Net的顶部菜单栏中"生成"-"生成 XXXX"(XXXX为你的项目名称)
补充:合并模块项目的使用
若在某个大型的安装程序中,模块飞分为模块1,模块2等,每次都把模块N的文件加进来重新编译就很麻烦,这是就可用“合并模块项目(MergeModule)”。
1.新建一个合并模块项目,名字为MergeModule1,添加需要的文件,生成后,将看到MergeModule1.msm
2.在這個大型的安装程序中,添加“合并模块”,将MergeModule1.msm添加进去
3.生成,安装,你会发现MergeModule1的内容也被安装到了安装目录下
C# winform 安装程序打包(自定义操作)的更多相关文章
- 【转】C# winform 安装程序打包(自定义操作)
(一),安装程序 以前用vs制作过安装程序,现在把步骤写出来,有帮助的大家一定要顶哦 第一步:建立工程1.打开vs,新建项目->其他项目类型->安装和部署(這個子项下面有安装项目和Web安 ...
- 技能Get·将浏览器已安装程序打包
阅文时长 | 0.51分钟 字数统计 | 820字符 主要内容 | 1.前言&环境说明&预备知识 2.详细步骤 3.声明与参考资料 『技能Get·将浏览器已安装程序打包』 编写人 | ...
- 图解 VS2015 如何打包winform 安装程序
http://learn.flexerasoftware.com/content/IS-EVAL-InstallShield-Limited-Edition-Visual-Studio?lang=10 ...
- VS2015 打包winform 安装程序
最近开发了一个小软件.由于需要打包.网上找了一些资料.然后整合了起来.希望对大家有所帮助.不全面请见谅. 打包控件 InstallShield-Limited-Edition 下面是注册地址 htt ...
- WinForm开发(3)——使用vs2017打包winform安装程序的过程
一.安装打包插件 注:安装好重启vs2017 二.打包过程 添加文件入口
- Advanced Installer 14.9 – WPF或winform应用程序打包成exe文件
Advanced Installer14.9 下载地址:https://pan.baidu.com/s/1uj2QcxWcpGdqsjAinNPIAw 提取码:sa3r 选择Visual Studi ...
- Visual Studio 2015 WinForm应用程序打包教程
最近开发了一个小软件.由于需要打包.网上找了一些资料.然后整合了起来.希望对大家有所帮助.不全面请见谅. 本人开发工具用的是Visual Studio 2015 打包控件 InstallShield ...
- VS2010制作网站自定义安装程序 转
最近在把一个网站打包成安装程序,这方面的文章网上有很多,也看了不少,但因为开发环境的不同,遇到了一些问题,便写下这篇文章记下整个流程(有很多资源都来自互联网,由于条目颇多,所以无法说明其来处,敬请谅解 ...
- VS2019打包WPF安装程序最新教程
VS2019打包WPF安装程序最新教程,使用Visual Studio 2019开发的WPF程序如果想要打包为安装程序,除了在VS2019找到WPF项目类库直接右键发布之外,更常用的还是将其打包为ex ...
随机推荐
- python3 不同目录间模块调用
#Author by Andy #_*_ coding:utf-8 _*_ #__file__获取当前程序的相对路径 import os,sys #print(__file__) # os.path. ...
- iframe详细的使用
谷歌火狐和ie是有区别的谷歌需要服务器,为了更安全 获取内容的时候, 正常渲染没问题获取内容var oIframe = document.getElementById('iframe'); oIfra ...
- Centos7下配置Redis开机自启动
最近在做作业的时候需要用到Redis缓存,由于每次重启服务器都需要重新启动Redis,也是忒烦人,于是就有了这一篇博客,好,废话不多说. 只有两个步骤: 设置redis.conf中daemonize为 ...
- 磁盘文件系统Fat、Fat32、NTFS、exFAT的优缺点
我们在Windows系统里格式化磁盘的时候,文件系统的选项里可以看到有“FAT”.“FAT32”.“NTFS”等选项,在对U盘或其他移动存储设备 格式化的时候还会出现“exFAT”选项,那么这四种磁盘 ...
- jQuery基础1
jQuery是轻量级的JavaScript库,jQuery 库位于一个 JavaScript 文件中,其中包含了所有的 jQuery 函数.更少的代码做更多的事. jQuery 可以选取某些元素并执行 ...
- ARM+LINUX 项目学习总结
一.确定功能 二.系统移植 1. 根据具体板子修改u-boot (三星的开发板资料) 2. 根据具体板子和功能修改内核 (基本的驱动) 3. 移植busybox 三.驱动修改编写 四.应用编程 附1 ...
- jquery笔记之属性选择器 查找以某种条件开头的页面元素
jquery笔记之属性选择器 查找以某种条件开头的页面元素 转载:http://www.blogbus.com/amyqiong-logs/78340326.html $("div[id]& ...
- uiimage 上传 数据库
之前我所接触的上传图片都是直接与服务器交互的,即 app端要做的就是上传到服务器 现在这个项目却是app先上传到"数据库",由"数据库"传到服务端 下面说主题 ...
- 关于ADO.NET 超时的问题
前几天超时问题困扰我很头疼. 为什么我设置了链接字符串的超时时间很长,可是等了一小会就报错Timeout了? connectionString="Data Source=.;Initial ...
- java selenium (十二) 操作弹出窗口
selenium 中如何处理弹出窗口 阅读目录 原理 在代码里, 通过 Set<String> allWindowsId = driver.getWindowHandles ...