示例#1
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);
        }
示例#2
0
        void SetDefaultVirtualDirValue()
        {
            string             strError = "";
            List <OpacAppInfo> infos    = null;
            // 用 appcmd 方式获得 所有虚拟目录的信息 (不仅仅是 dp2OPAC 虚拟目录)
            int nRet = OpacAppInfo.GetAllVirtualInfoByAppCmd(out infos,
                                                             out strError);

            if (nRet == -1)
            {
                goto ERROR1;
            }

            for (int i = 0; ; i++)
            {
                string strVirtualDir = "/dp2OPAC";
                if (i > 0)
                {
                    strVirtualDir = "/dp2OPAC" + (i + 1).ToString();
                }

                // 已经存在的虚拟目录不能使用

                // 查找一个虚拟目录是否存在
                // return:
                //      -1  不存在
                //      其他  数组元素的下标
                nRet = OpacAppInfo.Find(infos,
                                        this.comboBox_site.Text,
                                        strVirtualDir);
                if (nRet != -1)
                {
                    continue;
                }

                // 注意检查,不能是别的instance的数据目录
                if (this.VerifyDataDir != null)
                {
                    VerifyEventArgs e1 = new VerifyEventArgs();
                    e1.Value = strVirtualDir;
                    this.VerifyDataDir(this, e1);
                    if (String.IsNullOrEmpty(e1.ErrorInfo) == false)
                    {
                        continue;
                    }
                }

                if (this.VerifyInstanceName != null)
                {
                    VerifyEventArgs e1 = new VerifyEventArgs();
                    e1.Value = this.comboBox_site.Text + strVirtualDir;
                    this.VerifyInstanceName(this, e1);
                    if (String.IsNullOrEmpty(e1.ErrorInfo) == false)
                    {
                        continue;
                    }
                }

                this.textBox_instanceName.Text = strVirtualDir;
                return;
            }
            return;

ERROR1:
            MessageBox.Show(this, strError);
        }