• 一步步做自己的webinstall安装包


            众所周知,在VS环境下自带的WEBINSTALL项目无法选择安装路径,这让很多开发者头痛不已。现提供一种办法供大家参考

           1、 为了能更好的操作IIS,先添加个类库(InstallClassLibrary)到项目中。附代码

    using System;
    using System.Collections;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Configuration.Install;
    using System.DirectoryServices;
    using System.Diagnostics;
    using System.Windows.Forms;
    using System.Security.AccessControl;
    using System.IO;

    namespace InstallClassLibrary
    {
        [RunInstaller(true)]
        public partial class WebInstaller : Installer
        {
            public WebInstaller()
            {
                InitializeComponent();
            }
            public override void Install(IDictionary stateSaver)
            {
                base.Install(stateSaver);
                CreateVirtualDir();//以下代码为更改网站指定目录权限

                DirectoryInfo di = new DirectoryInfo("d:\\yourpath\\xml");
                if((di.Attributes&FileAttributes.ReadOnly)!=0)
                    di.Attributes=FileAttributes.Normal;
                DirectorySecurity ds=di.GetAccessControl();
                ds.AddAccessRule(new FileSystemAccessRule("NETWORK SERVICE",FileSystemRights.Modify,InheritanceFlags.ObjectInherit|InheritanceFlags.ContainerInherit,
                    PropagationFlags.None,AccessControlType.Allow));
                di.SetAccessControl(ds);
                //
            }

            void CreateVirtualDir()
            {
                try
                {
                  

                    DirectoryEntry root = new DirectoryEntry("IIS://localhost/W3SVC/1/root");
            
                    DirectoryEntry newRoot = root.Children.Add("virtualName", root.SchemaClassName);
               
                    newRoot.Properties["Path"][0] = "d:\\yourpath"//this.Context.Parameters["targetdir"];
                    newRoot.Properties["AppIsolated"][0] = 2;             // 值 0 表示应用程序在进程内运行,值 1 表示进程外,值 2 表示进程池
                    newRoot.Properties["AccessScript"][0] = true;          // 可执行脚本
                    newRoot.Invoke("AppCreate"true);
                    newRoot.Properties["DefaultDoc"][0] = "login.aspx";//设置起始页
                    newRoot.Properties["AppFriendlyName"][0] = "applicationName";   // 应用程序名

                    newRoot.CommitChanges();
                    root.CommitChanges();

          
                }
                catch (Exception ee)
                {
                    MessageBox.Show("虚拟目录创建失败!您可以手动创建! " + ee.Message + ";" + ee.Source + ";" + ee.TargetSite + ";" + ee.InnerException + ";" + ee.StackTrace, "Error", MessageBoxButtons.AbortRetryIgnore, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1, 0);
                }

            }

        }
    }

     

              2、添加安装项目到解决方案中,然后在该安装项目(Setup)中添加-项目输出,把WEB内容和刚才建立的类库添加到目录中。
              3、在安装项目左键在属性窗口中更改制造商,安装程序的标题、是否针对所有用户安装、产品名等内容。

                右键-视图-自定义操作,右键安装-添加自定义操作-应用程序文件夹,选择“安装类库(InstallClassLibrary)”,添加完成后,在文件系统中右键应用程序文件夹设置默认安装目录。

               若还想去定义更多的用户安装数据,请增加用户界面。

  • 相关阅读:
    Java 实现 Word 文档分栏效果
    Java 在PPT中添加SmartArt图形
    Java 创建 Excel 数据透视表
    Java分布式架构下如何实现分布式锁
    为什么选择学习Java语言的人越来越多?
    浅析JAVA中VO、DTO、DO、PO的了解
    Java基础之何为动态代理?
    Java三大框架是什么?
    android 系统裁剪 ​
    java怎么就能跨平台了呢
  • 原文地址:https://www.cnblogs.com/wishbay/p/2721468.html
Copyright © 2020-2023  润新知