1 新建“空白解决方案”,添加WEB SETUP项目
2 添加website空白文件夹夹内的文件。
   App_Data\Material_DB_Data.MDF
   App_Data\Material_DB_Log.LDF    用来附加的数据库
   Snap1.ico                                快捷方式图标文件
   Web.Config         (注:事先在文件里添加了connectionstring
   <add name="dbconnectionString" connectionString="server=(local);uid=sa;pwd=;database=material_db"/>
    )
   剩下的都是web网页文件了。
   全部拖入web站点文件夹,之后右键属性=》安装包 选中系统依赖=》MDAC 2.8 和 .NET 2.0 FRAMWROK
  

3 切换安装视图=》用户界面=》添加一个Textbox(A) 4个文本框 ,修改其属性
  

BannerBitmap    (None)
BannerText      安装数据库
BodyText        安装程序将在目标机器上安装数据库
Edit1Label      数据库名称:
Edit1Property   DBNAME
Edit1Value      Material_DB
Edit1Visible    True
Edit2Label      服务器名:
Edit2Property   SERVER
Edit2Value     (local)
Edit2Visible   True
Edit3Label     用户名:
Edit3Property  USER
Edit3Value     sa
Edit3Visible   True
Edit4Label     密码:
Edit4Property  PWD
Edit4Value
Edit4Visible   True


同样可以修改WEB安装计划的属性

  Misc
 AddRemoveProgramsIcon       (None)
 Author              google想要统治丢球
 Description            不需要描述
 DetectNewerInstalledVersion    False
 Keywords
 Localization           Chinese (Simplified)
 Manufacturer           微软
 ManufacturerUrl          www.microsoft.com
 PostBuildEvent
 PreBuildEvent
 ProductCode            {153A5F79-1E50-4ECD-B469-090A32EC2726}
 ProductName            google想要统治地球
 RemovePreviousVersions      False
 RestartWWWService         True
 RunPostBuildEventOn        successful build
 SearchPath
 Subject
 SupportPhone
 SupportUrl
 TargetPlatform          x86
 Title               google想要统治地球
 UpgradeCode            {39DEFB52-8F2F-47D1-9AB7-1D21691A8DF4}
 Version              1.0.0


具体请看视频 (注意不要遗漏将 resourceList.xml 设置为“嵌入的资源”,为Custome Action 中的install 定义DLL输出 设置DBNAME等参数,为class library 添加Interop.IWshRuntimeLibrary DLL 本篇使用该DLL注册快捷方式 )


Visual Studio 2005 how to make a install package from gakaki on Vimeo
Untitled from gakaki on Vimeo

resourceList.xml 文件 
为了项目修改方便使用XML 注意数据库我将其放置在App_Data中了,ico文件在根目录下,
<?xml version="1.0" encoding="utf-8" ?>
<configroot>
    <Files>
            <MDF>
                <File name="Material_DB_Data.MDF"/>  
            </MDF>
            <LDF>
                <File name="Material_DB_Log.LDF"/>
            </LDF>
            <图标ICO名>
                <File name="Snap1.ico"/>
            </图标ICO名>
            <默认首页>
            <File name="Default.aspx"/>
            </默认首页>
    </Files>
</configroot>



ShortCut.cs 生成桌面或者开始菜单快捷方式
Code
加密web.config文件 (还不完美 ,加密的时候会弹出DOS窗口,bat文件需要转码,不然不支持中文路径)
Code

安装类InstallerDB.cs
Code

安装包的整体思路
1 打开安装包安装,填写数据库的位置密码,填写虚拟站点名字,无误之后下一步。
2 这个时候才到 Installer。cs 里的 override void Install 方法里
  刚才输入的数据库位置密码,已经被记录下来,在安装包的custome action里的CustomActionData里
  /dbname=[DBNAME] /server=[SERVER] /user=[USER] /pwd=[PWD] /targetdir="[TARGETDIR]\"
3 找XML文件夹里的数据库 附加,还有默认首页
4 之后执行附加SQL的语句
5 使用新的连接数据库参数拼接出connectionstring,从复制的webconfig中找出原来的connectionstring修改。
6 保存快捷方式

 难度不高,但是任何一个环节出问题,都会有问题导致,安装失败。web站点必须的文件是否齐全,数据库,xml,web.config。
 建议可以添加System.Windows.Forms用messagebox.show显示信息。
 
 暂时有些小问题,按照之前cnblogs的很多帖子的介绍,重载Unistall方法,在安装的时候,可以在installstate.state文件
 里存放当前数据库的路径,web站点的真实路径。或者快捷方式的路径。然后卸载的时候读取state文件就可以删除快捷方式的路径,删除数据库。
 这个方式有一个缺点,万一卸载的时候点了取消,弹出对话框问您是否真的要取消,点了“否”的话。卸载程序会Rollback,
 卸载的文件会COPY回去。但是确会把installstate.state文件删除。这下好了,下次在要卸载的时候,因为找不到文件state
 就报异常(重载的Uninstall的方法里有读取state的动作)导致不让卸载了。当然这也不是什么大问题,重新修改安装文件的productcode
 就可以让你重新安装了(因为productid换了嘛)。然后不要写state文件将这些数据存放在XML文件里。(不想弄这个了,有好心人可以完善的话
 可以联系一下完善源代码)

源代码   注意需要 重新添加Web站点程序里文件夹里的文件



Future Reading:把SQL数据库部署到远程主机环境         
InstallShield 篇                          
InstallShield For .Net制作.Net项目安装包之完整代码
InstallShield X - Express Edition 10 制作.NET程序安装包初探
使用Install Shield打包应用程序的初级应用
visual studio MSI篇
一次.NET Web应用程序安装包的制作经历:Sql数据库安装的3种方式
.net 程序打包

Conditional Install of Desktop anhttp://www.cnblogs.com/jenry/articles/428348.htmld Quick Launch Shortcuts
Editing MSI Deployment Packages with Orca and Adding Custom Shortcuts

wix篇
[Reference]Wix Restart IIS code snippet
[Wix] 添加自定义Action