这几天本人接了个档案管理查询系统的小项目,踩过的坑。

其实功能都挺简单的,大致要求客户有很多pdf文档,为了方便管理,所有要开发一个相当于文件管理系统,本人正好有现成的文件管理系统,修改下就可以。其中客户要求pdf需要放到其他的盘符,不能和应用程序在一起,这个解决起来非常方便。系统上线了后,因为客户的pdf是分目录放的,如果上百个虚拟目录是手动创建的话,就有点繁琐。因此需要代码实现。记录如下:

     /// <summary>
        /// 创建虚拟目录
        /// </summary>
        /// <param name="hostname">主机名称或者网站访问ip地址 127.0.0.1</param>
        /// <param name="vdirname">需要创建虚拟目录的名称</param>
        /// <param name="mappingpath">映射地址</param>
        /// <param name="websiteid">网站应用程序id</param>
        public static void createvdir(string websiteid, string vdirname, string mappingpath, string hostname = "127.0.0.1")
        {
            /*
             在创建的时候会报错误:system.unauthorizedaccessexception: access is denied. (exception from hresult: 0x80070005 (e_accessdenied)) 
        网上查是因为权限的问题 解决方法为:在iis中的默认应用程序池-->高级设置...-->标识改成local system可以解决该问题 */ // iis 是否存在需要创建的虚拟目录,true:存在 false:不存在 var hasvdirname = false; try { // iis://127.0.0.1/w3svc/10/root string path = string.format("iis://{0}/w3svc/{1}/root", hostname, websiteid); directoryentry rootfolder = new directoryentry(path); // 循环遍历,判断需要创建的虚拟目录在 iis网站上面是否存在 foreach (system.directoryservices.directoryentry v in rootfolder.children) { if (v.name == vdirname) { hasvdirname = true; break; } } // 如果存在,则不需要创建 if (hasvdirname) return; // 加入集合 directoryentry newvirdir = rootfolder.children.add(vdirname, rootfolder.schemaclassname); // 指定虚拟目录映射的实际目录 newvirdir.properties["path"][0] = mappingpath; // 提交改变 newvirdir.commitchanges(); // 提交改变 rootfolder.commitchanges(); newvirdir.close(); rootfolder.close(); rootfolder.dispose(); newvirdir.dispose(); } catch (exception ex) { // 错误日志处理 } }