Пример #1
0
        // 从XML文件中装载已有的信息到对话框
        // return:
        //      -1  error
        //      0   not load
        //      1   loaded
        public static int LoadInfoFromDp2zserverXmlFile(
            string strXmlFileName,
            InstallZServerDlg dlg,
            // string strRootDir,
            out string strError)
        {
            strError = "";

            //string strXmlFileName = PathUtil.MergePath(strRootDir, "dp2zserver.xml");
            //string strOriginXmlFileName = PathUtil.MergePath(strRootDir, "~dp2zserver.xml");

            XmlDocument dom = new XmlDocument();

            try
            {
                dom.Load(strXmlFileName);
            }
            catch (FileNotFoundException)
            {
                dom.LoadXml("<root><libraryserver /></root>");
            }
            catch (Exception ex)
            {
                strError = "XML文件 " + strXmlFileName + " 装载到 XMLDOM 时发生错误: " + ex.Message;
                return(-1);
            }

            XmlElement node = dom.DocumentElement.SelectSingleNode("libraryserver") as XmlElement;

            // 万一已经存在的文件是不正确的?
            if (node == null)
            {
                // strError = "安装前已经存在的文件 " + strTemp + " 格式不正确。";
                strError = "配置文件中缺乏 libraryserver 元素";
                return(-1);
            }

            Debug.Assert(node != null, "");

            string strUserName = node.GetAttribute("username");
            string strPassword = node.GetAttribute("password");

            strPassword = DecryptPasssword(strPassword);

            string strAnonymousUserName = node.GetAttribute("anonymousUserName");
            string strAnonymousPassword = node.GetAttribute("anonymousPassword");

            strAnonymousPassword = DecryptPasssword(strAnonymousPassword);

            string strUrl = node.GetAttribute("url");

            dlg.UserName          = strUserName;
            dlg.Password          = strPassword;
            dlg.AnonymousUserName = strAnonymousUserName;
            dlg.AnonymousPassword = strAnonymousPassword;

            if (String.IsNullOrEmpty(strUrl) == false)
            {
                dlg.LibraryWsUrl = strUrl;
            }

            XmlElement databases = dom.DocumentElement.SelectSingleNode("databases") as XmlElement;

            if (databases != null)
            {
                dlg.DatabasesXml   = databases.OuterXml;
                dlg.MaxResultCount = databases.GetAttribute("maxResultCount");
                if (string.IsNullOrEmpty(dlg.MaxResultCount))
                {
                    dlg.MaxResultCount = "-1";
                }
            }

            XmlElement network = dom.DocumentElement.SelectSingleNode("network") as XmlElement;

            if (network != null)
            {
                string strPort = network.GetAttribute("port");
                int    port    = 210;
                if (string.IsNullOrEmpty(strPort) == false)
                {
                    Int32.TryParse(strPort, out port);
                }
                dlg.Port = port;

                dlg.MaxSessions = network.GetAttribute("maxSessions");
                if (string.IsNullOrEmpty(dlg.MaxSessions))
                {
                    dlg.MaxSessions = "-1";
                }
            }
            return(1);
        }
Пример #2
0
        // 写入dp2zserver.xml文件
        // return:
        //      -1  error, install faild
        //      0   succeed
        public static int WriteDp2zserverXmlFile(
            InstallZServerDlg dlg,
            string strXmlFileName,
            out string strError)
        {
            strError = "";

            //string strXmlFileName = PathUtil.MergePath(strRootDir, "dp2zserver.xml");
            //string strOriginXmlFileName = PathUtil.MergePath(strRootDir, "~dp2zserver.xml");

            XmlDocument dom = new XmlDocument();

            try
            {
                dom.Load(strXmlFileName);
            }
            catch (FileNotFoundException)
            {
                dom.LoadXml("<root><libraryserver /></root>");
                // bExist = false;
            }
            catch (Exception ex)
            {
                strError = "XML文件 " + strXmlFileName + " 装载到XMLDOM时发生错误: " + ex.Message + "。安装的最后配置无法完成。";
                return(-1);
            }

            XmlElement node = dom.DocumentElement.SelectSingleNode("libraryserver") as XmlElement;

            // 万一已经存在的文件是不正确的?
            if (node == null)
            {
                // strError = "安装前已经存在的文件 " + strTemp + " 格式不正确。";
                strError = "配置文件中缺乏 libraryserver 元素";
                return(-1);

                /*
                 * dom.LoadXml("<root><libraryserver /></root>");
                 * bExist = false;
                 * XmlNode node = dom.DocumentElement.SelectSingleNode("libraryserver");
                 * */
            }

            Debug.Assert(node != null, "");

            node.SetAttribute("url", dlg.LibraryWsUrl);

            node.SetAttribute("username", dlg.UserName);
            node.SetAttribute("password", EncryptPassword(dlg.Password));

            node.SetAttribute("anonymousUserName",
                              String.IsNullOrEmpty(dlg.AnonymousUserName) == true ? null : dlg.AnonymousUserName);

            if (String.IsNullOrEmpty(dlg.AnonymousUserName) == true)
            {
                node.RemoveAttribute("anonymousPassword");
            }
            else
            {
                node.SetAttribute("anonymousPassword", EncryptPassword(dlg.AnonymousPassword));
            }

            XmlElement databases = dom.DocumentElement.SelectSingleNode("databases") as XmlElement;

            if (databases == null)
            {
                databases = dom.CreateElement("databases");
                dom.DocumentElement.AppendChild(databases);
            }

            databases = DomUtil.SetElementOuterXml(databases, dlg.DatabasesXml) as XmlElement;
            if (dlg.MaxResultCount != "-1")
            {
                databases.SetAttribute("maxResultCount", string.IsNullOrEmpty(dlg.MaxResultCount) ? "-1" : dlg.MaxResultCount);
            }

            XmlElement network = dom.DocumentElement.SelectSingleNode("network") as XmlElement;

            if (network == null)
            {
                network = dom.CreateElement("network");
                dom.DocumentElement.AppendChild(network);
            }

            network.SetAttribute("port", dlg.Port.ToString());
            network.SetAttribute("maxSessions", string.IsNullOrEmpty(dlg.MaxSessions) ? "-1" : dlg.MaxSessions);

            try
            {
                dom.Save(strXmlFileName);
            }
            catch (Exception ex)
            {
                strError = "XML文件 " + strXmlFileName + " 保存时发生错误: " + ex.Message + "。安装的最后配置无法完成。";
                return(-1);
            }

            return(0);
        }
Пример #3
0
        // 从XML文件中装载已有的信息到对话框
        // return:
        //      -1  error
        //      0   not load
        //      1   loaded
        public static int LoadInfoFromDp2zserverXmlFile(
            string strXmlFileName,
            InstallZServerDlg dlg,
            // string strRootDir,
            out string strError)
        {
            strError = "";

            //string strXmlFileName = PathUtil.MergePath(strRootDir, "dp2zserver.xml");
            //string strOriginXmlFileName = PathUtil.MergePath(strRootDir, "~dp2zserver.xml");

            XmlDocument dom = new XmlDocument();

            try
            {
                dom.Load(strXmlFileName);
            }
            catch (FileNotFoundException)
            {
                dom.LoadXml("<root><libraryserver /></root>");
            }
            catch (Exception ex)
            {
                strError = "XML文件 " + strXmlFileName + " 装载到 XMLDOM 时发生错误: " + ex.Message;
                return -1;
            }

            XmlElement node = dom.DocumentElement.SelectSingleNode("libraryserver") as XmlElement;

            // 万一已经存在的文件是不正确的?
            if (node == null)
            {
                // strError = "安装前已经存在的文件 " + strTemp + " 格式不正确。";
                strError = "配置文件中缺乏 libraryserver 元素";
                return -1;
            }

            Debug.Assert(node != null, "");

            string strUserName = node.GetAttribute("username");
            string strPassword = node.GetAttribute("password");
            strPassword = DecryptPasssword(strPassword);

            string strAnonymousUserName = node.GetAttribute("anonymousUserName");
            string strAnonymousPassword = node.GetAttribute("anonymousPassword");
            strAnonymousPassword = DecryptPasssword(strAnonymousPassword);

            string strUrl = node.GetAttribute("url");

            dlg.UserName = strUserName;
            dlg.Password = strPassword;
            dlg.AnonymousUserName = strAnonymousUserName;
            dlg.AnonymousPassword = strAnonymousPassword;

            if (String.IsNullOrEmpty(strUrl) == false)
                dlg.LibraryWsUrl = strUrl;

            XmlElement databases = dom.DocumentElement.SelectSingleNode("databases") as XmlElement;
            if (databases != null)
            {
                dlg.DatabasesXml = databases.OuterXml;
                dlg.MaxResultCount = databases.GetAttribute("maxResultCount");
                if (string.IsNullOrEmpty(dlg.MaxResultCount))
                    dlg.MaxResultCount = "-1";
            }

            XmlElement network = dom.DocumentElement.SelectSingleNode("network") as XmlElement;
            if (network != null)
            {
                string strPort = network.GetAttribute("port");
                int port = 210;
                if (string.IsNullOrEmpty(strPort) == false)
                    Int32.TryParse(strPort, out port);
                dlg.Port = port;

                dlg.MaxSessions = network.GetAttribute("maxSessions");
                if (string.IsNullOrEmpty(dlg.MaxSessions))
                    dlg.MaxSessions = "-1";
            }
            return 1;
        }
Пример #4
0
        // 写入dp2zserver.xml文件
        // return:
        //      -1  error, install faild
        //      0   succeed
        public static int WriteDp2zserverXmlFile(
            InstallZServerDlg dlg,
            string strXmlFileName,
            out string strError)
        {
            strError = "";

            //string strXmlFileName = PathUtil.MergePath(strRootDir, "dp2zserver.xml");
            //string strOriginXmlFileName = PathUtil.MergePath(strRootDir, "~dp2zserver.xml");

            XmlDocument dom = new XmlDocument();
            try
            {
                dom.Load(strXmlFileName);
            }
            catch (FileNotFoundException)
            {
                dom.LoadXml("<root><libraryserver /></root>");
                // bExist = false;
            }
            catch (Exception ex)
            {
                strError = "XML文件 " + strXmlFileName + " 装载到XMLDOM时发生错误: " + ex.Message + "。安装的最后配置无法完成。";
                return -1;
            }

            XmlElement node = dom.DocumentElement.SelectSingleNode("libraryserver") as XmlElement;

            // 万一已经存在的文件是不正确的?
            if (node == null)
            {
                // strError = "安装前已经存在的文件 " + strTemp + " 格式不正确。";
                strError = "配置文件中缺乏 libraryserver 元素";
                return -1;
                /*
                dom.LoadXml("<root><libraryserver /></root>");
                bExist = false;
                XmlNode node = dom.DocumentElement.SelectSingleNode("libraryserver");
                 * */
            }

            Debug.Assert(node != null, "");

            node.SetAttribute("url", dlg.LibraryWsUrl);

            node.SetAttribute("username", dlg.UserName);
            node.SetAttribute("password", EncryptPassword(dlg.Password));

            node.SetAttribute("anonymousUserName",
                String.IsNullOrEmpty(dlg.AnonymousUserName) == true ? null : dlg.AnonymousUserName);

            if (String.IsNullOrEmpty(dlg.AnonymousUserName) == true)
                node.RemoveAttribute("anonymousPassword");
            else
                node.SetAttribute("anonymousPassword", EncryptPassword(dlg.AnonymousPassword));

            XmlElement databases = dom.DocumentElement.SelectSingleNode("databases") as XmlElement;
            if (databases == null)
            {
                databases = dom.CreateElement("databases");
                dom.DocumentElement.AppendChild(databases);
            }

            databases = DomUtil.SetElementOuterXml(databases, dlg.DatabasesXml) as XmlElement;
            if (dlg.MaxResultCount != "-1")
                databases.SetAttribute("maxResultCount", string.IsNullOrEmpty(dlg.MaxResultCount) ? "-1" : dlg.MaxResultCount);

            XmlElement network = dom.DocumentElement.SelectSingleNode("network") as XmlElement;
            if (network == null)
            {
                network = dom.CreateElement("network");
                dom.DocumentElement.AppendChild(network);
            }

            network.SetAttribute("port", dlg.Port.ToString());
            network.SetAttribute("maxSessions", string.IsNullOrEmpty(dlg.MaxSessions) ? "-1" : dlg.MaxSessions);

            try
            {
                dom.Save(strXmlFileName);
            }
            catch (Exception ex)
            {
                strError = "XML文件 " + strXmlFileName + " 保存时发生错误: " + ex.Message + "。安装的最后配置无法完成。";
                return -1;
            }

            return 0;
        }
Пример #5
0
        private void MenuItem_dp2ZServer_instanceManagement_Click(object sender, EventArgs e)
        {
            string strError = "";
            int nRet = 0;

            bool bControl = Control.ModifierKeys == Keys.Control;
            bool bInstalled = true;

            this._floatingMessage.Text = "正在配置 dp2ZServer 实例 ...";

            try
            {
                AppendSectionTitle("配置实例开始");

                AppendString("正在获得可执行文件目录 ...\r\n");

                Application.DoEvents();

                string strExePath = InstallHelper.GetPathOfService("dp2ZService");
                if (string.IsNullOrEmpty(strExePath) == true)
                {
                    if (bControl == false)
                    {
                        strError = "dp2ZServer 未曾安装过";
                        goto ERROR1;
                    }
                    bInstalled = false;
                }
                strExePath = StringUtil.Unquote(strExePath, "\"\"");

                if (bInstalled == true)
                {
                    AppendString("正在停止 dp2ZServer 服务 ...\r\n");

                    nRet = InstallHelper.StopService("dp2ZService",
            out strError);
                    if (nRet == -1)
                        goto ERROR1;

                    AppendString("dp2ZServer 服务已经停止\r\n");
                }

                try
                {
                    // 修改 dp2zserver.xml
                    {
                        string strXmlFileName = Path.Combine(Path.GetDirectoryName(strExePath), "dp2zserver.xml");

                        InstallZServerDlg param_dlg = new InstallZServerDlg();
                        GuiUtil.AutoSetDefaultFont(param_dlg);
                        // 从XML文件中装载已有的信息到对话框
                        // return:
                        //      -1  error
                        //      0   not load
                        //      1   loaded
                        nRet = InstallZServerUtil.LoadInfoFromDp2zserverXmlFile(
                            strXmlFileName,
                            param_dlg,
                            out strError);
                        if (nRet == -1)
                            goto ERROR1;

                        param_dlg.ShowDialog(this);
                        if (param_dlg.DialogResult == DialogResult.Cancel)
                        {
                            strError = "配置实例被放弃 ...";
                            goto ERROR1;
                        }

                        // 写入dp2zserver.xml文件
                        // return:
                        //      -1  error, install faild
                        //      0   succeed
                        nRet = InstallZServerUtil.WriteDp2zserverXmlFile(
                param_dlg,
                strXmlFileName,
                out strError);
                        if (nRet == -1)
                            goto ERROR1;
                    }

                }
                finally
                {
                    if (bInstalled == true)
                    {
                        string strError1 = "";
                        AppendString("正在重新启动 dp2ZServer 服务 ...\r\n");
                        nRet = InstallHelper.StartService("dp2ZService",
        out strError1);
                        if (nRet == -1)
                        {
                            AppendString("dp2ZServer 服务启动失败: " + strError1 + "\r\n");
                            MessageBox.Show(this, strError1);
                        }
                        else
                        {
                            AppendString("dp2ZServer 服务启动成功\r\n");
                        }
                    }

                    AppendSectionTitle("配置实例结束");
                }
            }
            finally
            {
                this._floatingMessage.Text = "";
            }
            return;
        ERROR1:
            AppendString("出错: " + strError + "\r\n");
            MessageBox.Show(this, strError);
        }
Пример #6
0
        // 首次安装 dp2ZServer
        private void MenuItem_dp2ZServer_install_Click(object sender, EventArgs e)
        {
            string strError = "";
            int nRet = 0;

            this._floatingMessage.Text = "正在安装 dp2ZServer - Z39.50 服务器 ...";
            try
            {

                AppendSectionTitle("安装 dp2ZServer 开始");

                AppendString("正在获得可执行文件目录 ...\r\n");

                Application.DoEvents();

                string strExePath = InstallHelper.GetPathOfService("dp2ZService");
                if (string.IsNullOrEmpty(strExePath) == false)
                {
                    strError = "dp2ZServer 已经安装过了,不能重复安装";
                    goto ERROR1;
                }
                // strExePath = Unquote(strExePath);

                // program files (x86)/digitalplatform/dp2library
                string strProgramDir = GetProductDirectory("dp2zserver");

                PathUtil.CreateDirIfNeed(strProgramDir);

                string strZipFileName = Path.Combine(this.DataDir, "zserver_app.zip");

                AppendString("安装可执行文件 ...\r\n");

                // 更新可执行目录
                // return:
                //      -1  出错
                //      0   没有必要刷新
                //      1   已经刷新
                nRet = RefreshBinFiles(
                    false,
                    strZipFileName,
                    strProgramDir,
                    null,
                    out strError);
                if (nRet == -1)
                    goto ERROR1;

#if NO
                // 还需要把 zserver_data.zip 的内容都展开到程序目录的 temp 子目录中,以兼容以前的 Installer 功能
                string strTempDir = Path.Combine(strProgramDir, "temp");
                PathUtil.CreateDirIfNeed(strTempDir);
                nRet = dp2Library_extractPartDir(strTempDir,
        "cfgs,templates,other",
        out strError);
                if (nRet == -1)
                    goto ERROR1;
#endif
                // 展开 zserver_data.zip 到程序目录
                string strDataZipFileName = Path.Combine(this.DataDir, "zserver_data.zip");
                nRet = ExtractDataFile(strDataZipFileName, strProgramDir, out strError);
                if (nRet == -1)
                    goto ERROR1;

                // 创建 dp2zserver.xml
                {
                    string strXmlFileName = Path.Combine(strProgramDir, "dp2zserver.xml");

                    InstallZServerDlg param_dlg = new InstallZServerDlg();
                    GuiUtil.AutoSetDefaultFont(param_dlg);
                    // 从XML文件中装载已有的信息到对话框
                    // return:
                    //      -1  error
                    //      0   not load
                    //      1   loaded
                    nRet = InstallZServerUtil.LoadInfoFromDp2zserverXmlFile(
                        strXmlFileName,
                        param_dlg,
                        out strError);
                    if (nRet == -1)
                        goto ERROR1;

                    param_dlg.ShowDialog(this);
                    if (param_dlg.DialogResult == DialogResult.Cancel)
                    {
                        strError = "安装被放弃 ...";
                        goto ERROR1;
                    }

                    // 写入dp2zserver.xml文件
                    // return:
                    //      -1  error, install faild
                    //      0   succeed
                    nRet = InstallZServerUtil.WriteDp2zserverXmlFile(
            param_dlg,
            strXmlFileName,
            out strError);
                    if (nRet == -1)
                        goto ERROR1;
                }

                // 注册为 Windows Service
                strExePath = Path.Combine(strProgramDir, "dp2zserver.exe");

                AppendString("注册 Windows Service ...\r\n");

                nRet = InstallService(strExePath,
        true,
        out strError);
                if (nRet == -1)
                    goto ERROR1;

                AppendSectionTitle("安装 dp2ZServer 结束");
                Refresh_dp2ZServer_MenuItems();
            }
            finally
            {
                this._floatingMessage.Text = "";
            }
            return;
        ERROR1:
            MessageBox.Show(this, strError);
        }