一步步做自己的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)”,添加完成后,在文件系统中右键应用程序文件夹设置默认安装目录。
若还想去定义更多的用户安装数据,请增加用户界面。

时间: 2024-09-18 09:12:37

一步步做自己的webinstall安装包_实用技巧的相关文章

用ASP.NET做的个性化的邮件发送系统_实用技巧

一.运行环境  虽然Microsoft公司推出Visual Studio .NET已经有一段时间了,但.NET Framework SDK却依然还是BETA版,分别是BETA 1和BETA 2.这二个版本之间也有很大的差异,譬如说,很多名称空间(NameSpace)的名字都不一样.我们这里选择的是BETA 2.操作系统是Windows 2000 professional版.  二.基本知识  首先介绍一下做邮件发送系统中用到的一些知识.  (一).先来简要的认识一下在程序中要用到的协议--简单邮

repeater做删除前弹窗询问实例_实用技巧

前台 复制代码 代码如下: <asp:LinkButton ID="delLinkButton" runat="server" OnClientClick='return confirm("确定删除?")'        CommandName="del" CommandArgument='<%# Eval("ID") %>'>删 除</asp:LinkButton> 后

使用JavaScript代码实现各种数据控件的反选功能 不要只做拖控件的菜鸟_实用技巧

原来也很简单和用C#语言来实现这个差不多吧,只不过使唤了两种语言哦,而且这样写代码对系统的性能也比较好.如图所示:为反选所实现的功能. 下面将实现反选的两部分代码写一下哦.控件使用的是GridView控件 复制代码 代码如下: <asp:TemplateField HeaderText="<input type='checkbox' id='cbAll' name='cbAll' onclick='selAll(this.checked);' />反选"> &l

查看Python安装路径以及安装包路径小技巧

  这篇文章主要介绍了查看Python安装路径以及安装包路径小技巧,本文使用直接在命令行运行Python代码的方法检测安装路径以及安装包路径,需要的朋友可以参考下 特别是linux系统,装了多个python,有时候找不到python的绝对路径,有时候装了个django,又找不到django安装到哪里了..当然查看的方法有很多种,这里列出几种,供没有经验的人参考下. 复制代码 代码如下: G:codemoniter>python -c "from distutils.sysconfig im

php自定义apk安装包实例_php技巧

本文实例讲述了php自定义apk安装包的方法,分享给大家供大家参考.具体实现方法如下: 众所周知,apk格式安装文件是android智能系统的安装文件,下面我们来看一个利用php实现自定义apk安装包实例. 一.需求: 需要实现对产品进行一次推荐好友安装的活动,每个会员下载自己的专属安装包(里面记录会员的相关信息). 二.思路: 经过了解,发现apk安装包原来只是zip的一个马甲,使用php的ZipArchive类可以对文件进行操作. 三.实现代码: 复制代码 代码如下: // 源文件 $apk

查看Python安装路径以及安装包路径小技巧_python

特别是linux系统,装了多个python,有时候找不到python的绝对路径,有时候装了个django,又找不到django安装到哪里了..当然查看的方法有很多种,这里列出几种,供没有经验的人参考下. 复制代码 代码如下: G:\code\moniter>python -c "from distutils.sysconfig import get_python_lib; print (get_python_lib())" C:\Python27\Lib\site-package

无服务器做任意二级米子站_应用技巧

无服务器做任意二级米子站 1.支持单米空间 2.国际米泛解析 现在我只列出了框架,功能将在以后逐个添加,欢迎大家共同讨论 实现方法: 添加记录:*,类型:URL-URL转发,转发地址:本程序的地址(http://localhost/) http://localhost/index.asp的代码: 复制代码 代码如下: <%  DNS_Key=Split(Split(Request.Servervariables("HTTP_REFERER"),"/")(2),

asp.net dataview做无限极分类的又一用法_实用技巧

数据库结构: classidid 主键 jobClassName 对应的类型名称 ClassName 对应的父类的id 通常做法: 复制代码 代码如下: private void Display(string parentid, String space) { DataTable dt; String strSQL; strSQL = "Select * From Tree Where ParentID =" + parentid + " Order By ClassID D

ASP.net做的IP访问限制_实用技巧

偶做留言本的时候想起做这么个,具体思路也许不好,做出来只是抛砖引玉,希望有更好的方法! IP添加页是用了一个ListBox, TextBox,两个Button,而在其他的页上则直接用当前IP对比数据库中的IP,代码如下! 限制IP添加页HTML代码 <%@ Page Language="C#" AutoEventWireup="true" CodeFile="ip.aspx.cs" Inherits="admin_ip"