zoukankan      html  css  js  c++  java
  • 学习:Web安装项目创建桌面快捷方式及重写安装类(转)

    一、WEB安装项目部署

    1、新建:

    新建项目-安装和部署项目-WEB安装项目

    2、部署:

    (1)进入文件系统视图,"项目-右键-视图-文件系统";也可以直接点"解决方案资源管理器"上部的快捷图标
    (2)
    "WEB应用程序文件夹"添加文件,例如aspx文件,ico文件,bin目录及文件,images目录及文件等
    (3)
    设置虚拟目录属性,右击"WEB应用程序文件夹"选属性,一般只须修改默认文档"defaultdocument"以及虚拟目录名"VirtualDirectorly"(若有多个虚拟目录
    (4)Web
    安装项目默认没有提供"用户的程序菜单",需要自己创建:右击"目标计算机上的文件系统-添加特殊文件夹-用户的程序菜单"
    (5)Web
    安装项目默认也没有用户桌面目录,添加方法同上
    右击"目标计算机上的文件系统-添加特殊文件夹-WEB自定义文件夹",逐次添加多个,但需要指出的是,这些多的虚拟目录只能在设计时设置好名称等属性,而在安装过程中却无从控制)

    补充:

    web项目部署时,添加网站有两种方式:
    把你的网站先发布,然后把发布后的页面一一添加进来同时把诸如images之类的文件夹要在安装部署项目中文件夹然后再添加其下文件
    在安装部署项目中添加项目输出,选择你的网站,但这样做部署项目会把你网站所有文件包括.cs文件原样打包进去,不太好

    二、重写安装类:

    1、作用:

    安装类是在安装部署项目被生成后,在被"安装","提交","回滚","卸载"的过程中来完成一些自定义的操作

    2、创建:

    (1)新建一个类库项目
    (2)
    删掉类库中原有类文件,新建一个"安装程序类"("添加新项"中有这个模版的)
    (3)
    自定义方法:这个安装类特殊就在于引用了System.Configuration.Install.dllusing System.Configuration.Install和继承:Installer
    在自定义方法中主要是对Install,Uninstall,Commit,Rollback方法进行override重写

    3、使用:

    创建完后,还不起效,要和安装部署项目配合才得以使用

    方法一:

    (1)在安装部署项目中将刚才类库项目添加为"项目输出-主输出"
    (2)
    在安装部署项目"视图-自定义操作""安装","提交","回滚","卸载"等操作上"右键-添加自定义操作"选择刚才添加的类库项目输出

    方法二:

    (1)将类库进行编译,生成.dll
    (2)
    在安装部署项目"视图-自定义操作""安装","提交","回滚","卸载"等操作上"右键-添加自定义操作"选择文件,浏览到你编译生成的.dll

    至此,你所写的安装类将在"安装","卸载","回滚","提交"过程中起效了!

    三、为Web安装项目添加桌面快捷方式及图标

    1Web安装项目特殊于一般的安装部署项目:

    (1)Web安装项目无法在自身加入的网站项目中创建快捷方式,可以借助创建.url文件方式来创建(:.lnk也是快捷方式文件,但安装部署项目不允许添加.lnk文件,却可以添加.url文件)
    (2)Web
    安装项目默认没有用户桌面和用户程序菜单的添加,"文件系统视图-右键-添加特殊文件夹-***"中添加一些特殊操作
    (3)Web
    安装项目在安装过程中用户自己动态设置"虚拟目录",所以.url文件中不能先前定死http://localhost/***,只能通过"安装类"在自定义"安装"操作时动态创建

    2、创建"安装类"并添加到Web安装项目的"自定义操作""安装"

    内容如下:

    using System;

    using System.Collections.Generic;

    using System.ComponentModel;

    using System.Configuration.Install;

     

    using System.IO;

    using System.DirectoryServices;//操作IIS虚拟目录

     

    namespace TestInstallCLB

    {

        [RunInstaller(true)]

        public partial class Installer2 : Installer

        {

            public Installer2()

            {

                InitializeComponent();

            }

            public override void Install(System.Collections.IDictionary stateSaver)

            {

                // 创建桌面快捷方式及图标,借助.url生成网络快捷方式

     

                // 先进行安装,因为安装后才会有安装目录

                base.Install(stateSaver);  

     

                //获取软件安装的物理目录,形如:D:\Inetpub\wwwroot\Endy_Web\InstallClass.dll

                string fname = System.Reflection.Assembly.GetExecutingAssembly().Location;

     

                //也可以获取软件安装的物理目录,和上面获取的结果一样,形如:D:\Inetpub\wwwroot\Endy_Web\InstallClass.dll

                //string fname2 = Context.Parameters["assemblypath"];

     

                string[] sz = fname.Split(new char[] { '\\' });

                StreamWriter sw = new StreamWriter(File.Open(Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory) + "\\测试站点.url", FileMode.Create, FileAccess.Write));

                sw.WriteLine("[InternetShortcut]");

                sw.WriteLine("URL=http://localhost/" + sz[sz.Length - 2]);

                sw.WriteLine("IconFile=" + fname.Substring(0, fname.LastIndexOf("\\")) + "\\logo.ico");

                sw.WriteLine("IconIndex=0");

                sw.Flush();

                sw.Close();

     

                //创建用户"程序"菜单快捷方式及图标,借助.url生成网络快捷方式(要和界面添加的用户程序目录一致)

                /*处理"开始-程序"目录的位置,因为默认SpecialFolder.Programs会到当前用户的程序目录下,而我们要处理到All User的程序目录下,

                因为在web部署项目中添加卸载快捷方式时,我们在"文件系统视图-右键-添加特殊文件夹-用户的'程序'菜单"是添加到All User的程序目录下的,所以下面用程序创建的要和界面添加的保持一致,

                同时当添加到All User的程序目录下,那么所有用户的程序菜单中都会有的*/

                string str = Environment.GetFolderPath(Environment.SpecialFolder.Programs);

                string[] arr = str.Split(new char[] { '\\' });

                arr[arr.Length - 3] = "All Users";

                string t = "";

                foreach (string i in arr)

                {

                    t += i + "\\";

                }

     

                StreamWriter swr = new StreamWriter(File.Open(t + "测试站点.url", FileMode.Create, FileAccess.Write));

                swr.WriteLine("[InternetShortcut]");

                swr.WriteLine("URL=http://localhost/" + sz[sz.Length - 2]);

                swr.WriteLine("IconFile=" + fname.Substring(0, fname.LastIndexOf("\\")) + "\\logo.ico");

                swr.WriteLine("IconIndex=0");

                swr.Flush();

                swr.Close();

     

            }

     

            public override void Uninstall(System.Collections.IDictionary savedState)

            {

                base.Uninstall(savedState); // 先进行卸载

                //删除虚拟目录[有问题不能用]

                //System.DirectoryServices.DirectoryEntry dirroot = new DirectoryEntry("IIS://localhost/W3SVC/1/ROOT");

                //DirectoryEntry Dirport = dirroot.Children.Find("Endy_Web","IIsVirtualDir");

                //Dirport.Invoke("AppDelete", true);

                //dirroot.CommitChanges();

                //删除安装文件夹[有问题不能用]

                //string fname = Context.Parameters["assemblypath"];

                //if (Directory.Exists(fname.Substring(0, fname.LastIndexOf("\\"))))

                //{

                //    DirectoryInfo di=new DirectoryInfo(fname.Substring(0, fname.LastIndexOf("\\")));

                //    foreach (FileInfo f in di.GetFiles())

                //        f.Delete();

                //    di.Delete();

                //}

     

            }

        }

    }

    四、url文件内容

    最后客户端安装完毕后桌面生成快捷方式("我的测试软件.url"实际上是看不到扩展名的)用记事本打开内容如下:
    [InternetShortcut]
    URL=http://localhost/EndyWeb
    IconFile=C:\Inetput\wwwroot\EndyWeb\logo.ico
    IconIndex=0

     


    文章来源:http://hi.baidu.com/xtuwangzhi/blog/item/472217475dbef80f6a63e5f6.html


  • 相关阅读:
    ubuntu创建桌面启动器
    UVA 题目11300 Spreading the Wealth
    js实现C#的Server.Encode和Server.Decode
    boost库在工作(20)线程之五
    rmmod: chdir(/lib/modules): No such file or directory
    例说uboot从命令到驱动
    java高级工程师struts的知识重点
    ThreadLocal简单学习
    [CSS]为什么不推荐在CSS中使用ID选择器
    laravel中将session由文件保存改为数据库保存
  • 原文地址:https://www.cnblogs.com/LeimOO/p/1559274.html
Copyright © 2011-2022 走看看