// 兑现修改。 // 创建数据目录。创建或者修改 opac.xml文件 int DoModify(out string strError) { strError = ""; int nRet = 0; List <OpacAppInfo> infos = null; nRet = OpacAppInfo.GetOpacInfo(out infos, out strError); if (nRet == -1) { return(-1); } for (int i = 0; i < this.listView_instance.Items.Count; i++) { ListViewItem item = this.listView_instance.Items[i]; LineInfo line_info = (LineInfo)item.Tag; string strDataDir = ListViewUtil.GetItemText(item, COLUMN_DATADIR); string strSite = ListViewUtil.GetItemText(item, COLUMN_SITE); string strVirtualDir = ListViewUtil.GetItemText(item, COLUMN_VIRTUALDIR); if (String.IsNullOrEmpty(strDataDir) == true) { strError = "第 " + (i + 1).ToString() + " 行的数据目录尚未设置"; return(-1); } // 探测虚拟目录是否已经创建 // infos 中 // 查找一个虚拟目录是否存在 // return: // -1 不存在 // 其他 数组元素的下标 nRet = OpacAppInfo.Find(infos, strSite, strVirtualDir); if (nRet == -1) { string strAppDir = Path.Combine( Environment.ExpandEnvironmentVariables("%SystemDrive%\\inetpub\\wwwroot"), strVirtualDir.Replace("/", "")); // 注意去掉非法路径字符 PathUtil.CreateDirIfNeed(strAppDir); // 创建程序目录,并复制进基本内容 nRet = CreateNewAppDir(strAppDir, strDataDir, out strError); if (nRet == -1) { return(-1); } // 注册 Web App // 只能用于 IIS 7 以上版本 nRet = OpacAppInfo.RegisterWebApp( strSite, strVirtualDir, strAppDir, out strError); if (nRet == -1) { strError = "创建新的虚拟目录(site=" + strSite + ";virtual_dir=" + strVirtualDir + ";physicalPath=" + strAppDir + ")失败: " + strError; return(-1); } line_info.PhysicalPath = strAppDir; } // 探测数据目录,是否已经存在数据,是不是属于升级情形 // return: // -1 error // 0 数据目录不存在 // 1 数据目录存在,但是xml文件不存在 // 2 xml文件已经存在 nRet = DetectDataDir(strDataDir, out strError); if (nRet == -1) { return(-1); } if (nRet == 2) { // 进行升级检查 } else { // 需要进行最新安装,创建数据目录 nRet = CreateNewDataDir(strDataDir, out strError); if (nRet == -1) { return(-1); } } // 兑现修改 if (line_info.Changed == true) { // 保存信息到 opac.xml文件中 // return: // -1 error // 0 succeed nRet = line_info.SaveToXml(strDataDir, out strError); if (nRet == -1) { return(-1); } line_info.Changed = false; } } #if NO // 删除注册表中多余的instance信息 for (int i = this.listView_instance.Items.Count; ; i++) { // 删除虚拟目录。数据目录不用删除,因为界面操作当时已经删除过了 } #endif return(0); }
// 创建一个实例。 // 创建数据目录。创建或者修改 opac.xml文件 int CreateInstance(ListViewItem item, out string strError) { strError = ""; int nRet = 0; List <OpacAppInfo> all_infos = null; // IIS 中的全部虚拟目录 // 获得全部的虚拟目录信息,不光是 dp2OPAC 有关的 nRet = OpacAppInfo.GetAllVirtualInfoByAppCmd(out all_infos, out strError); if (nRet == -1) { return(-1); } List <OpacAppInfo> infos = null; // dp2OPAC 类型的全部虚拟目录 // 获得全部 dp2OPAC 有关的 nRet = OpacAppInfo.GetOpacInfoByAppCmd(out infos, out strError); if (nRet == -1) { return(-1); } LineInfo line_info = (LineInfo)item.Tag; string strDataDir = ListViewUtil.GetItemText(item, COLUMN_DATADIR); string strSite = ListViewUtil.GetItemText(item, COLUMN_SITE); string strVirtualDir = ListViewUtil.GetItemText(item, COLUMN_VIRTUALDIR); string strPhysicalPath = ListViewUtil.GetItemText(item, COLUMN_PHYSICALPATH); if (String.IsNullOrEmpty(strDataDir) == true) { strError = "数据目录尚未设置"; return(-1); } // 查找一个虚拟目录是否存在 // return: // -1 不存在 // 其他 数组元素的下标 nRet = OpacAppInfo.Find(infos, strSite, strVirtualDir); if (nRet == -1) { nRet = OpacAppInfo.Find(all_infos, strSite, strVirtualDir); if (nRet != -1) { // 这表明这是一个已经存在的虚拟目录,但不是 dp2OPAC 类型的 strError = "虚拟目录 '" + strSite + strVirtualDir + "' 名字和一个非 dp2OPAC 类型的已经存在的虚拟目录发生了冲突,创建或者修改操作失败"; return(-1); } #if NO string strAppDir = Path.Combine( Environment.ExpandEnvironmentVariables("%SystemDrive%\\inetpub\\wwwroot"), strVirtualDir.Replace("/", "")); // 注意去掉非法路径字符 #endif if (string.IsNullOrEmpty(strPhysicalPath) == true) { strPhysicalPath = GetAppPhysicalPath(strSite, strVirtualDir); PathUtil.TryCreateDir(strPhysicalPath); } // 创建程序目录,并复制进基本内容 nRet = CreateNewAppDir(strPhysicalPath, strDataDir, out strError); if (nRet == -1) { return(-1); } // 注册 Web App // 只能用于 IIS 7 以上版本 nRet = OpacAppInfo.RegisterWebApp( strSite, strVirtualDir, strPhysicalPath, out strError); if (nRet == -1) { strError = "创建新的虚拟目录(site=" + strSite + ";virtual_dir=" + strVirtualDir + ";physicalPath=" + strPhysicalPath + ")失败: " + strError; return(-1); } ListViewUtil.ChangeItemText(item, COLUMN_PHYSICALPATH, strPhysicalPath); // line_info.PhysicalPath = strAppDir; } else { // 数据目录有可能修改,因此需要修改程序目录中的 start.xml #if NO OpacAppInfo info = all_infos[nRet]; Debug.Assert(string.IsNullOrEmpty(info.PhysicalPath) == false, ""); #endif Debug.Assert(string.IsNullOrEmpty(strPhysicalPath) == false, ""); // 修改 start.xml nRet = CreateStartXml(Path.Combine(strPhysicalPath, "start.xml"), strDataDir, out strError); if (nRet == -1) { return(-1); } } // 探测数据目录,是否已经存在数据,是不是属于升级情形 // return: // -1 error // 0 数据目录不存在 // 1 数据目录存在,但是xml文件不存在 // 2 xml文件已经存在 nRet = DetectDataDir(strDataDir, out strError); if (nRet == -1) { return(-1); } if (nRet == 2) { // 进行升级检查 // TODO: 是否要为数据目录增配权限 } else { // 需要进行最新安装,创建数据目录 nRet = CreateNewDataDir(strDataDir, out strError); if (nRet == -1) { return(-1); } } // 兑现修改 if (line_info.Changed == true) { // 保存信息到 opac.xml文件中 // return: // -1 error // 0 succeed nRet = line_info.SaveToXml(strDataDir, out strError); if (nRet == -1) { return(-1); } line_info.Changed = false; } return(0); }