這幾天本人接了個檔案管理查詢系統的小項目,踩過的坑。 其實功能都挺簡單的,大致要求客戶有很多pdf文檔,為了方便管理,所有要開發一個相當於文件管理系統,本人正好有現成的文件管理系統,修改下就可以。其中客戶要求pdf需要放到其他的盤符,不能和應用程式在一起,這個解決起來非常方便。系統上線了後,因為客戶 ...
這幾天本人接了個檔案管理查詢系統的小項目,踩過的坑。
其實功能都挺簡單的,大致要求客戶有很多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) { // 錯誤日誌處理 } }