我们做好的web系统,特别是涉及到数据库的,可能都需要一个数据库的配置过程,如果涉及到一些复杂的系统,可能还需要更加麻烦的配置才能使我们的系统正常运行,这一切对于熟悉系统的IT人员来说并不复杂,但是如果我们做的是产品,需要普通用户或者技术能力不强的用户来做这样的工作可能就比较困难,那么我们能否像wordpress一样,提供一个安装页面呢,然后让用户在界面上进行一个简单的配置过程,我们系统就能正常使用了。
为了实现这样的功能,我在百度谷歌后没能找到通用的开源实现,为此只能自己实现一个了,界面如下
接下来分享一下,本实现的主要文件包含如下几个
其中install.aspx为主要安装界面,install.css为相关样式,install.xml为安装的配置文件,web.config为网站配置文件(只要能保证install.aspx能够正常运行,也可以不要)
接下来先说说install.xml文件,该文件内容如下
<?xml version="1.0" encoding="utf-8" ?>
<setup>
<step desc="设置SQL登陆信息" id="1">
<CustomSettings name="服务器地址" key="@ServerAddress" default=".\sqlexpress"></CustomSettings>
<CustomSettings name="登陆账号" key="@UserName" default="sa"></CustomSettings>
<CustomSettings name="登陆密码" key="@Password" default="123456"></CustomSettings>
</step>
<step desc="设置其他系统配置项" id="2">
<CustomSettings name="禁止上传的文件(e.g.: .exe|.rar)" key="@DeniedExts" default=".exe|.rar|.dll"></CustomSettings>
</step>
<action desc="正在执行安装操作..." id="3">
<makedir desc="正在创建log目录" key="@logs">~/logs</makedir>
<makedir desc="正在创建临时目录" key="@temp">~/temp</makedir>
<makedir desc="正在创建上传目录" key="@upload">~/upload</makedir>
<execsql desc="正在执行SQL操作" connstr="Data Source=@ServerAddress;User ID=@UserName;Password=@Password;Initial Catalog=master;">~/database.sql</execsql>
<execsql desc="正在执行SQL操作" connstr="Data Source=@ServerAddress;User ID=@UserName;Password=@Password;Initial Catalog=LamdataCRM;">~/tables.sql</execsql>
<replace desc="正在执行配置修改保存操作" source="#DBSERVER#;#DBUID#;#DBPWD#;#UPLOADDIR#;#DENIEDEXTS#" target="@ServerAddress;@UserName;@Password;@upload;@DeniedExts">~/ERP.config</replace>
<replace desc="正在执行配置修改保存操作" source="#LOGDIR#" target="@logs">~/log4net.config</replace>
<replace desc="正在执行配置修改保存操作" source="#CRMTEMP#" target="@temp">~/Web.config.bak</replace>
<delfile desc="正在清理文件">~/install.aspx</delfile>
<delfile desc="正在清理文件">~/install.css</delfile>
<delfile desc="正在清理文件">~/install.xml</delfile>
<delfile desc="正在清理文件">~/database.sql</delfile>
<delfile desc="正在清理文件">~/tables.sql</delfile>
<copycontent desc="正在执行文件复制操作" from="~/Web.config.bak" to="~/Web.config"></copycontent>
</action>
</setup>
其中setp定义在执行安装操作之前需要完成的步骤,主要是收集信息,action节点为实际的安装操作
所有的节点中均包含desc属性,该属性主要用于界面显示。setp的子节点必须包含id属性,并且唯一。
CustomSettings用于获取用户的输入信息,name为显示字段,key为值对于的主键(必须以@开头),default为默认值
action目前包含如下操作
1. makedir: 新建一个相对目录,并且将目录的绝对路径放到对应的key中
2. execsql:执行sql脚本,connstr为连接字符串,可以通过【@Key】的方式引用上下文的自定义数据
3. replace:替换操作,针对innertext引述的文件执行用target引用的数据替换source中的内容,支持";"分割多个替换对象
4. delfile:删除文件,主要删除innertext指定的文件
5. copycontent:复制内容操作,用from文件中的内容替换to文件中的内容
你还可以实现更多自定义的操作,方法是在install.aspx中实现一个自定义的类,该类实现IInstallAction接口,IInstallAction接口的定义如下:
public interface IInstallAction
{
string Description { get; }
void Exec(Dictionary<string, string> config);
void Init(XmlNode node);
}
其中Init方法中的node参数将被传递为action的一个子节点,节点名称和类名一致。