转自:http://linwx1978.blog.163.com/blog/static/1504106920101104834271/

以前的日志中转了不少文章,最近听说转文不是好习惯,决定普世一把,改贴链接了。大家有兴趣的话可以顺着链接进去看看:
http://geekswithblogs.net/mnf/articles/78888.aspx
用途是,对于IIS下的网络应用程序,通过编程改变权限设置。IIS Manager当然挺方便的,但是有些时候(特别是在做部署文件的时候)是不能使用图形界面的,所以必需用编程解决。文中的代码我测试了一下,还是挺方便的,但有几个地方要修改:
1、把DebugHelper的行注掉。(DebugHelper是另外一个作者自己写的类)
2、工程中增加对System.DirectoryServices的引用。
3、工程中用到了StringHelper,不知道是什么东西,不过有趣的是在用到的地方后面注解里提供了一个等价的实现,只要释放出来就可以了(删除黄色的部分):
string sEntryName = StringHelper.RightAfterLast(MetabasePath, @"/");//metabasePath.Substring(metabasePath.LastIndexOf("/") + 1);
4、IISMetaPath小小地做个修改:
        public static string IISMetaPath(string SiteMetaPath, String VDirRoot, String relPath)
        {
            SiteMetaPath = SiteMetaPath.Replace(@"/LM/", "localhost/");
            return @"IIS://" + SiteMetaPath + @"/root/" + VDirRoot + (relPath != "" ? @"/" : "") + relPath;
        }
大家可以对照原文看一下,修改的地方是红色的部分,原文的程序好像是只支持设置应用程序下的某个路径,修改了之后,只要在relPath中填入空字符串就可以设置应用程序了。

补充:微软发布了一个很有用的工具包叫IIS Resources,其中有个工具叫IIS Metabase Explorer,可以看到网络App几乎所有的设置(没敢把话说满是因为还没有仔细研究过对应关系)。就本文中涉及到的应用而言,其实就是其中的一个键值(AuthFlags)。

有一点要注意,在IIS管理中,在设置Hanlder Mappings的地方我们会看到五个可设置项,其中包括一个ASP.NET Impersonation,但是在http://technet2.microsoft.com/WindowsServer/en/Library/271ae19b-853f-4672-b743-5ba126e902db1033.mspx?mfr=true中虽然也有五个项,却没有一个对应上面说到的这个设置项的……嘿嘿,原来这个选项是在web.config中设置的,位置是:system.web > identity

  • <identity impersonate="false" />关闭
  • <identity impersonate="true" />开放:使用IIS的帐户
  • <identity impersonate="true"  userName="..." password="..."/>使用一个指定的帐户

下面帖上我改造后的代码,谨供分享:(注意后面涉及到了另外一个应用,即对于IIS5,加上了.mvc后缀的handler,目前的代码不知道为什么在IIS7下无效,不过也没有害处)。

public static string IISMetaPath(string Site, string VDirRoot, string relPath)
        {
            if (relPath != @"/")
            {
                if (!relPath.StartsWith(@"/"))
                {
                    relPath = @"/" + relPath;
                }
                if (relPath.EndsWith(@"/"))
                {
                    relPath = relPath.Substring(0, relPath.Length - 1);
                }
            }
            else
            {
                relPath = "";
            }

return @"IIS://" + Site + @"/W3SVC/1/root/" + VDirRoot + relPath;
        }

static void Main(string[] args)
        {
            DirectoryEntry entry = null;

//Application: disable Anonymous Auth and enable Basic Auth
            string sPath = IISMetaPath(@"localhost", @"……(应用程序名)", @"/");
            entry = new DirectoryEntry(sPath);

AuthFlags nAuthFlags = (AuthFlags)(entry.Properties[KEY_AUTHFLAGS][0]);
            nAuthFlags = nAuthFlags & ~AuthFlags.AuthAnonymous; //clear anonymous
            nAuthFlags = nAuthFlags | AuthFlags.AuthBasic; //Add Basic 
            entry.Properties[KEY_AUTHFLAGS][0] = nAuthFlags;
            entry.CommitChanges();

//Check script mapping list
            bool mvcExist = false;
            foreach (string s in entry.Properties[KEY_SCRIPTMAPS])
            {
                char[] splitter = { ',' };
                string[] list = s.Split(splitter);
                if (list[0] == ".mvc")
                {
                    mvcExist = true;
                    break;
                }
            }

if (!mvcExist)
            {
                entry.Properties[KEY_SCRIPTMAPS].Add(@".mvc,%systemroot%\Microsoft.NET\Framework\" +
                    @"v2.0.50727\aspnet_isapi.dll,1");
                entry.CommitChanges();
            }

以下略……

C#下编程完成IIS网络App的权限设置的更多相关文章

  1. IIS中的上传目录权限设置问题

    虽然 Apache 的名声可能比 IIS 好,但我相信用 IIS 来做 Web 服务器的人一定也不少.说实话,我觉得 IIS 还是不错的,尤其是 Windows 2003 的 IIS 6(马上 Lon ...

  2. linux下C语言socket网络编程简例

    原创文章,转载请注明转载字样和出处,谢谢! 这里给出在linux下的简单socket网络编程的实例,使用tcp协议进行通信,服务端进行监听,在收到client的连接后,发送数据给client:clie ...

  3. 5.3linux下C语言socket网络编程简例

    原创文章,转载请注明转载字样和出处,谢谢! 这里给出在Linux下的简单socket网络编程的实例,使用tcp协议进行通信,服务端进行监听,在收到客户端的连接后,发送数据给客户端:客户端在接受到数据后 ...

  4. (十三) [终篇] 一起学 Unix 环境高级编程 (APUE) 之 网络 IPC:套接字

    . . . . . 目录 (一) 一起学 Unix 环境高级编程 (APUE) 之 标准IO (二) 一起学 Unix 环境高级编程 (APUE) 之 文件 IO (三) 一起学 Unix 环境高级编 ...

  5. 用C++实现网络编程---抓取网络数据包的实现方法

    一般都熟悉sniffer这个工具,它可以捕捉流经本地网卡的所有数据包.抓取网络数据包进行分析有很多用处,如分析网络是否有网络病毒等异常数据,通信协议的分析(数据链路层协议.IP.UDP.TCP.甚至各 ...

  6. Unix 环境高级编程 (APUE) 之 网络 IPC:套接字

    一起学 Unix 环境高级编程 (APUE) 之 网络 IPC:套接字 . . . . . 目录 (一) 一起学 Unix 环境高级编程 (APUE) 之 标准IO (二) 一起学 Unix 环境高级 ...

  7. Django是Python下的一款网络服务器框架

    被解放的姜戈01 初试天涯   Django是Python下的一款网络服务器框架.Python下有许多款不同的框架.Django是重量级选手中最有代表性的一位.许多成功的网站和APP都基于Django ...

  8. 【Linux网络编程】TCP网络编程中connect()、listen()和accept()三者之间的关系

    [Linux网络编程]TCP网络编程中connect().listen()和accept()三者之间的关系 基于 TCP 的网络编程开发分为服务器端和客户端两部分,常见的核心步骤和流程如下: conn ...

  9. 这里主要展示在Win7下怎么用IIS发布局域网站

    首先对IIS做一个简要的介绍: IIS(InternetInformationServices)互联网信息服务的简称.本质是一种Web(网页)服务组件,其中包含Web.FTP和SMTP三大服务器,分别 ...

随机推荐

  1. 小程序animation动画效果(小程序组件案例)

    WXML <view class="container"> <view class="page-body"> <view clas ...

  2. o(1)取b > a,且b的二进制中1的个数等于a二进制中1的个数,且使b最小

    给你一个uint32 a,让你找到另一个uint32 b,使b > a,且b的二进制中1的个数等于a二进制中1的个数.且使b最小.(数据保证可出) 1 因为1的个数不变,所以必然大于n+lowb ...

  3. java基本类型的大小

    1个字节是8位byte 1字节short 2字节int 4字节long 8字节float 4字节double 8字节char 2字节boolean 1字节======================= ...

  4. DevExpress v17.2新版亮点——CodeRush篇(二)

    用户界面套包DevExpress v17.2日前终于正式发布,本站将以连载的形式为大家介绍各版本新增内容.本文将介绍了CodeRush v17.2 的新功能,快来下载试用新版本! 支持XAML 标记扩 ...

  5. Python_常用的正则表达式处理函数

    正则表达式就是用查找字符串的,它能查找规则比较复杂的字符串反斜杠:正则表达式里面用"\"作为转义字符. s='<a class="h3" href=&qu ...

  6. IOS延时加载网络图片

        重网上下载图片是很慢的,为了不影响体验,选择延时加载图片是很好的办法. 一个tableView 列表,左边暂时没有图 - (UITableViewCell *)tableView:(UITab ...

  7. C一次将整个文件读入内存

    最近工作,有个需求需要将YUV的整个文件读入内存,然后处理这些YUV数据,一种比较有效的方法如下: #include <stdio.h> #include <stdlib.h> ...

  8. CSS3之border-image

    先上效果图,类似于IPHONE手机左上角的返回按钮样式,如果是在CSS2那么就要做一张背景图片扩展就没那么灵活了,CSS3内就不需要了,CSS3样式挺强大方便的. 源图片: 样式: .banner { ...

  9. MAC OS下使用OpenSSL生成私钥和公钥的方法

    MAC OS自带了OpenSSL,所以不用去编译那一坨跟SHIT一样的源码.直接在命令行里使用OPENSSL就可以. 打开命令行工具,然后输入 openssl打开openssl,接着只要三句命令就可以 ...

  10. pycharm 提示性信息

    语法错误:文字底部红色波浪线 解决方案:语法修改正确 语法不符合规范:文字底部灰色波浪线 解决方案:快捷键(Alt + Enter + Enter ) 单词拼写提示:文字底部绿色波浪线 解决方案: 单 ...