Beyond the dream——飛雪飄寒

————磨難不過是人生鍵盤的回車。。。。。。
  博客园  :: 首页  :: 联系 :: 订阅 订阅  :: 管理
      最近开发的一个.net小型系统需要制作安装程序并刻盘给用户使用,由于之前没有制作过WEB应用程序的安装包,所以去网上google了一下,没想到网上这方面的资料还挺多的,不过由于领导要求制作的安装程序需要有序列号验证,但网上关于序列号验证的资料似乎没有,故本人在此向博友寻求关于制作WEB应用程序带有序列号验证安装包的方法,希望哪位博友能够指点一下。
      下面先贴出本人整理的用VS.NET2003制作WEB应用程序未带序列号验证的安装包的方法。
  一、创建一个安装和部署项目
  1、在"解决方案资源管理器"中的解决方案中添加一个新项目。
  用鼠标右键单击解决方案,在弹出的菜单中选择"添加"->"新建项目"。在打开的对话框中选择"安装和部署项目",并选择"Web安装项目"模板。在输入项目名称后,点击"确定"按钮,将新项目添加到解决方案中。

  2、将项目的输出添加到安装和部署项目中。
  添加完安装和部署项目后,vs.net2003 IDE会自动打开一个名为"文件系统"的管理器。用鼠标右键单击此管理器右边树型结构中的"Web应用程序文件夹",在弹出的菜单中选择"添加"->"项目输出"。在弹出的对话框中,选择"项目"(这时只有一个,就是你的web应用程序项目),然后在下面的列表中选择"主输出"和"内容文件"两项(可以复选),接着在"配置"中选择"Release .NET",点击"确定"按钮。
  经过上面两个步骤,一个基本的安装和部署程序就制作完成了,将此项目编译后就得到了一个Web安装程序包。

      二、在很多的情况下,我们做的Web应用程序都要使用到.NET Framework、MDAC、数据库等,能不能在安装程序的同时也将.NET Framework、MDAC、数据库进行验证并一起安装呢?答案是肯定的。下面将说明其实现方法:      

      首先下载Microsoft Visual Studio .NET 2003 引导程序插件 PluginInstaller.msi
      下载地址:http://download.microsoft.com/download/4/e/f/4ef7254b-d6c2-4f6f-8028-f03a594d5edf/PluginInstaller.msi (微软的下载地址可能更改了,以前的那个下载地址用不了,找了很久才找到这个可用的下载地址)
      通过 Microsoft Visual Studio .NET 2003 引导程序插件,您可以轻而易举地创建安装程序,将 .NET Framework 1.1 和/或 MDAC 2.7 随您的应用程序一起重新分发。为使 .NET Framework 应用程序可以在某台特定的计算机上运行,该计算机上必须安装有 .NET Framework。 任何使用 ADO.NET 来连接数据库的 .NET Framework 应用程序都要求使用 MDAC 2.7。 许多计算机都已经安装了这些组件,但是,为了确保某个应用程序能够运行,应随该应用程序重新分发这些组件。Visual Studio .NET 2003 引导程序与 Visual Studio .NET 安装程序和部署项目集成在一起。 基于这一点,您可以只创建一个安装程序,用它来自动检测目标计算机上是否存在那些系统必备软件,并根据需要进行安装。 如果在安装任何组件的过程中要求计算机重新启动,安装程序将会自动继续后续的安装操作。 因此,应用程序的用户只需要运行一个安装程序即可安装系统必备软件和相应的应用程序。若要了解有关 Visual Studio .NET 2003 引导程序的更多内容,请参阅《.NET Framework 1.1 开发指南》中的 Visusal Studio .NET 2003 文章。

      补充:在安装完  Microsoft Visual Studio .NET 2003 后,最好立即安装 本引导程序插件 PluginInstaller.msi ,以使得你的 .NET 程序安装包在制作时就已将  .NET Framework 1.1 和/或 MDAC 2.7 打包进你的安装包中,可是得你的安装包能顺利安装进行。
      1、使用 Setup 项目安装 .NET 框架  
      (1)确保 Visual Studio .NET 框架引导程序插件已安装。   
      (2)在 解决方案资源管理器 中选择 Setup 项目。在 项目 菜单上,选择 属性。  
      (3)将 引导程序 属性设置为 Windows 安装引导程序。

      2、设置Framework安装提示和exe文件路径
      必须启用 .NET 框架的启动条件;默认情况下,引用 .NET 框架的任何项目都启用了该条件。要检查启动条件,请从 View 菜单指向 Editor,并选择 Launch Conditions,然后查找名为.Net Framework 的启动条件。
      (1)选中启动条件-〉.net framework节点 ,按F4  InstallUrl 的值改为 dotnetfx.exe
      (2)message 的值为 即将安装.net framework1.1 运行时,是否继续?如果客户的机器上没有安装.net framework 这个设定提示在安装的时候将会出现.

      3、使用 Setup 项目安装 MDAC  
      在“解决方案资源管理器”选择Setup1安装项目工程,选择“视图”菜单,指向“启动条件”,打开“启动条件”管理器。在"启动条件"管理器中,右键点击"目标计算机上的要求",在弹出的的菜单中选择"添加注册表启动条件"。你会发现在"搜索目标计算机"中多了一项"搜索 RegistryEntry1",在"启动条件"中多了一项"Condition1"。
      选择"搜索 RegistryEntry1",在"属性"对话框中填写如下内容:
      Property:MDACSEARCH
      RegKey:Software\Microsoft\DataAccess
      Root:vsdrrHKLM
      Value:FullInstallVer
      选择"Condition1" ,在"属性"对话框中填写如下内容:
      Condition:MDACSEARCH>="2.7"
      进行这一步是因为在安装.NET框架的时候需要MDAC。
      注意:在这里最好不要更换 MDAC 搜索节点的 Property 的名称(MDACSEARCH),如果更换名称很有可能
在BUILD 的时候 ,没有把mdac_typ.exe 文件打包进来,这可能是bootstrapper的一个bug。

      4、将MSDE Sp3打包进.Net安装项目中 
      MSDE SP3下载地址:http://www.microsoft.com/downloads/details.aspx?displaylang=zh-cn&FamilyID=90DCD52C-0488-4E46-AFBF-ACACE5369FA3
      (1)创建安装项目“Setup1”安装项目 
      在“文件”菜单上指向“添加项目”,然后选择“新建项目”。
      在“添加新项目”对话框中,选择“项目类型”窗格中的“安装和部署项目”,然后选择“模板”窗格中的“安装项目”。
      在“名称”框中键入 “setup1”。单击“确定”关闭对话框。
      项目被添加到解决方案资源管理器中,并且文件系统编辑器打开。
      在“属性”窗口中,选择 ProductName 属性,并键入”XX管理系统”。 
      (2)下载MSDE Sp3 安装程序与MSI安装文件修改器(Orca)工具。 
      (3)选择“文件系统编辑器”,在“视图“菜单上指向“添加”,然后选择“合并模块…”(Merge Moudle),在添加模块中,找到MSDE sp3安装文件所在目录,将MSM和MSM\1033下的所有文件,添加进来。在安装项目Setup1的属性(Properties)中的“Search Path”,添加MSM和MSM\1033目录。单击“生成菜单下的“生成解决方案”,编译Setup1安装项目工程。用Orca MSI安装文件修改器打开生成的安装包(Setup1.msi)文件,在左列的表栏中 
      选择“InstallExecuteSequence”表,修改下面的属性值: 
      GetSqlStates.XXXXXX 103改成421 
      RemoveExistingProducts值改成1800 
      InstallInitialize值改成1799 
      在InstallUISequence 
      选择“InstallUISequence”表,修改下面的值: 
      GetSqlStates.XXXXXX 103改成421 
      选择“Property”表,添加以下三个属性: 
      SqlInstanceName:MSDEDH实例服务名 
      SqlSecurityMode:SQL(不加这行确实也行,就是没办法用SQL模式登录)
      SqlSaPwd:sa的密码  

      连接测试:
      单击修改过的Setup1.msi安装文件,确认是否能够安装;
      osql -S 机器名\MSDEDH实例服务名 -U sa -P sa密码 
      能够进去——>OK!打包成功!

      三、编译 Setup 项目将.NET 框架可重新分发软件包将与该 Setup.exe 一起打包 
      将自己需要打包的程序加入进去,编译过后,你会注意到在生成的安装目录下,你将会注意到多了几个文件(dotnetfx.exe、Config.ini、langpack.exe、Settings.ini),详细介绍如下:

      Config.ini -- 安装配置文件 
      dotnetfx.exe -- .Net Framework组件 
      langpack.exe -- 语言包 
      Settings -- 设置文件 
      ItemSoft.msi -- .msi安装文件 
      Setup.exe -- 主安装程序

      Config的文件内容如下: 
      [config.ini] 
      IDS_NOT_SINGLE_INSTANCE=已有另一版本的安装程序正在运行。 该应用程序一次只能运行一个版本。 
      IDS_DIALOG_CAPTION=%s 安装 
      IDS_SINGLE_INSTANCE_FAIL=CreateMutex 无法对单个的实例检查分配句柄。 
      IDS_SETUP_FAILURE=%s 安装失败。如果问题继续存在,请与产品支持人员联系。 
      IDS_DEFAULT_PRODUCTNAME=应用程序 
      IDS_SETTINGS_INIT_FAILURE=安装设置文件'%s'在解析时出错,或者无法定位该文件。 
      IDS_CREATE_PROCESS_FAILURE=下列命令行的 CreateProcess 操作失败: %s 。 
      IDS_INSUFFICIENT_PRIVILEGES=运行 %s 安装程序要求具有本地系统管理员的权限。安装程序现在退出。 
      IDS_DIALOG_TEXT=单击"确定"开始安装 %1 。单击"取消"退出安装。 
      IDS_ERROR_CAPTION=%s 安装错误 
      IDS_VERSION_DETECT_FAILED=%1 的版本检测失败。请确保安装程序存在于指定位置。%n%n返回消息: %2 
      IDS_MSI_NOT_FOUND=无法定位产品安装程序'%s'。安装程序现在退出。 
      IDS_REBOOT_QUERY=安装完成。现在重启吗? 
      IDS_SETUP_SUCCEEDED=安装成功。 
      IDS_INVALID_LANGID_CAPTION=无效的语言包代码 
      IDS_FX_NOT_FOUND=无法定位 .NET framework exe 文件'%s'。安装程序现在退出。 
      IDS_INVALID_LANGID_MESSAGE=语言包代码 %s 无效。跳过... 
      IDS_LANGPACK_NOT_FOUND=无法定位语言包 %s。安装程序现在退出。 
      IDS_MDAC_NOT_FOUND=无法定位 MDAC exe 文件'%s'。安装程序现在退出。 
      IDS_FILE_NOT_FOUND=无法定位'%1'。安装程序现在退出。

      Settings.ini文件内容如下: 
      [Bootstrap] 
      MsiPath=ItemSoft.msi -- .msi安装文件 
      ProductName=XXXX管理系统 --安装产品名称 
      MdacVersion=2.71 
      BootstrapFx=true 
      FxInstallerPath= 
      LanguageID=2052 
      BootstrapLangPack=true 
      LangPackInstallerPath= 
      BootstrapMdac=true 
      MdacInstallerPath=

      以上方法能够很简单的将.Net Framwork等组件与你的应用程序一起打包到安装程序中,并且自动检测客机上的是否安装过.Net Framework等组件,然后运行安装。相信大家一定能够喜欢这个插件。

本文参考资料:http://www.microsoft.com/china/community/program/originalarticles/techdoc/deployNETApp.mspx
http://blog.csdn.net/lihonggen0/archive/2004/05/17/13654.aspx