// 兑现修改。 // 创建数据目录。创建或者修改 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); }
// 根据已有的配置,填充InstanceList // TODO: 另外还需要从 IIS 中寻找名为 dp2OPAC 的虚拟目录。这是为了兼容以前的安装形态 // TODO: 创建注册表事项的时候,需要把没有写入注册表的实例信息也添加到注册表中。这样,只要看到有注册表事项,就表示只从注册表中取信息就是完整的了,不需要再从 IIS 中试探性取名为 dp2OPAC 的虚拟目录 int FillInstanceList(out string strError) { strError = ""; this.listView_instance.Items.Clear(); List <OpacAppInfo> infos = null; int nRet = OpacAppInfo.GetOpacInfo(out infos, out strError); if (nRet == -1) { return(-1); } int nErrorCount = 0; foreach (OpacAppInfo info in infos) { string strSite = ""; string strVirtualDir = ""; StringUtil.ParseTwoPart(info.IisPath, "/", out strSite, out strVirtualDir); strVirtualDir = "/" + strVirtualDir; ListViewItem item = new ListViewItem(); ListViewUtil.ChangeItemText(item, COLUMN_SITE, strSite); ListViewUtil.ChangeItemText(item, COLUMN_VIRTUALDIR, strVirtualDir); ListViewUtil.ChangeItemText(item, COLUMN_DATADIR, info.DataDir); ListViewUtil.ChangeItemText(item, COLUMN_PHYSICALPATH, info.PhysicalPath); this.listView_instance.Items.Add(item); LineInfo line_info = new LineInfo(); item.Tag = line_info; // line_info.PhysicalPath = info.PhysicalPath; // return: // -1 error // 0 file not found // 1 succeed nRet = line_info.Build(info.DataDir, out strError); if (nRet == -1) { ListViewUtil.ChangeItemText(item, COLUMN_ERRORINFO, strError); item.BackColor = Color.Red; item.ForeColor = Color.White; nErrorCount++; } } if (nErrorCount > 0) { this.listView_instance.Columns[COLUMN_ERRORINFO].Width = 200; } else { this.listView_instance.Columns[COLUMN_ERRORINFO].Width = 0; } return(0); }