前一段时间.应公司某项目产品化要求.制作了一个安装程序.之前也试用了不少安装包制作软件如NSIS、Smart Install Maker、VS安装布署项目等
但按领导指示要“一键化安装”,简化用户布署服务器的操作。因为是.NET 开发的B/S应用系统,所以如果要自动配置环境、布署IIS站点、还原数据库等操作用安装包制作软件就显的力不从心了。于是决定自行开发一个比较简单的安装程序。
要点:1.此安装程序显然是WIN32程序(不能让用户去为了执行安装程序再配置相关环境),于是决定采用VB6.0开发。
2.根据相关方法(读注册表等)要实现判断操作系统信息、IIS是否正确安装、数据库是否正确安装、.NET Framework 4.0(产品运行环境)是否安装。
3.当操作系统、IIS、数据库没有正确安装是需提示用户无法继续,需用户自行进行相关软件的安装操作。
4.当.NET Framework4.0没有安装时,需自动安装.NET Framework4.0。
5.环境检测没有问题后,让用户填写相关信息,配置信息如IIS站点端口号、数据库登录用户/密码等。
6.释放相关程序文件到用户所选安装目录,调用执行外接相关程序。
7.因为某些设置操作用VB6实现起来太复杂,因此在确定有.NET Framework4.0环境情况下,
可采用主程序(vb6)调用外部程序(c#)去实现一些设置操作,如IIS站点自动布署、数据库自动还原、相关目录权限设置、相关菜单创建。
8.释放相关卸载程序。
相关主要界面一览:
主安装程序(VB6)中用到的技术点比较少,主要是嵌入资源文件、读写注册表、读写INI文件、得到系统文件夹、读取系统进程、CAB包释放等,这个都可以在网上搜索到。
在上面最后一张图中点击执行配置后,将采用SHELL方式,调用IIS 自动配置+创建快键方式、SQL数据库还原、文件夹权限设置三个小程序进行配置操作。
程序都是些基础代码,在这里简单讲一下实现原理:
1.IIS 自动配置+创建快键方式:
IIS站点自动配置功能可以借签:利用C#创建 IIS 站点并设置.NET Framework版本为ASP.NET 2.0 的方法
原理:IIS 6.0以后使用MetaBase.xml存储IIS信息,因此可以直接修改这个文件即可. 相关.NET Framework 版本设置需要注意要取得其系统目录再设置ScriptMaps信息.
通过把主安装程序中用户填写的相关端口号、站点名称等信息对IIS自动配置程序用到的INI文件进行更新后,再执行IIS自动配置用户设置的站点。
创建快捷方式主要代码如下:
// Create a Windows Script Host Shell class
IWshShell_Class shell = new IWshShell_Class();//创建 Windows Script Host Shell 类
// Define the shortcut file
IWshURLShortcut shortcut = shell.CreateShortcut(System.Environment.GetFolderPath(System.Environment.SpecialFolder.Favorites) + "\\测试.url") as IWshURLShortcut;
shortcut.TargetPath = "http://localhost:88";
// Save it
shortcut.Save();
2.SQL数据库还原
SQL数据库操作比较简单,可以参考:C#自动附加数据库或还原、备份、分离等 - 曾伟 - 博客园
上面的这篇文章实现的SQL数据库操作比较全面,并且比较通用,值得借签学习。
3.文件夹权限设置
利用C#中DirectorySecurity 类对配置到INI中的相关目录进行权限设置,主要代码如下:
DirectoryInfo dirinfo = new DirectoryInfo(pathname);
//取得访问控制列表
DirectorySecurity dirsecurity = dirinfo.GetAccessControl();
//FullControl 完全控制
dirsecurity.AddAccessRule(new FileSystemAccessRule(username, FileSystemRights.FullControl, InheritanceFlags.ContainerInherit, PropagationFlags.InheritOnly, AccessControlType.Allow));
//ReadOnly 只读
dirsecurity.AddAccessRule(new FileSystemAccessRule(username, FileSystemRights.Read, AccessControlType.Allow));
//Write 写入
dirsecurity.AddAccessRule(new FileSystemAccessRule(username, FileSystemRights.Write, AccessControlType.Allow));
//Modify 修改
dirsecurity.AddAccessRule(new FileSystemAccessRule(username, FileSystemRights.Modify, AccessControlType.Allow));
尚未解决问题:
1.对于IIS 6.0初次布署.NET项目时,需要对WEB 扩展中将.net 相关项设置为允许,此操作可以通过程序实现,本人还没有找到相关技术实现文章,如果有朋友懂这面请评论指导。
2.不少项目系统中都会用到导出EXCLE等操作。需要设置COM组件的相关权限。这个采用程序去实现比较复杂,没有找到相关好的实现。