Beispiel #1
0
        // 加载mime集合
        private void LoadMimes()
        {
            string path = $"{it.Config.WorkFolder}mime.xml";

            if (!System.IO.File.Exists(path))
            {
                using (var doc = new dpz3.Xml.XmlDocument()) {
                    var xml = new dpz3.Xml.XmlNode("xml");
                    doc.Nodes.Add(xml);
                    var mime = xml.AddNode("mime");
                    mime.Attr["extension"] = ".html";
                    mime.Attr["value"]     = "text/html";
                    dpz3.File.UTF8File.WriteAllText(path, doc.InnerXml);
                }
            }
            string content = dpz3.File.UTF8File.ReadAllText(path);

            using (var doc = new dpz3.Xml.XmlDocument(content)) {
                var xml   = doc["xml"];
                var mimes = xml.GetNodesByTagName("mime", false);
                foreach (var mime in mimes)
                {
                    _mimes[mime.Attr["extension"].ToLower()] = mime.Attr["value"];
                }
            }
        }
Beispiel #2
0
        // 安装所有的包
        private void InstallPacks()
        {
            Program.Println("[*] 初始化包管理 ...");

            string folderRoot    = $"{it.ExecPath}wwwroot";
            string folderDown    = $"{it.ExecPath}downloads";
            string folderPackage = $"{it.ExecPath}packages";

            if (!System.IO.Directory.Exists(folderRoot))
            {
                System.IO.Directory.CreateDirectory(folderRoot);
            }
            if (!System.IO.Directory.Exists(folderDown))
            {
                System.IO.Directory.CreateDirectory(folderDown);
            }
            if (!System.IO.Directory.Exists(folderPackage))
            {
                System.IO.Directory.CreateDirectory(folderPackage);
            }

            // 判断并创建配置文件
            string fileXml = $"{folderPackage}{it.SplitChar}packages.xml";

            if (!System.IO.File.Exists(fileXml))
            {
                Program.Println("[*] 正在创建包管理文件 ...");
                using (var doc = new dpz3.Xml.XmlDocument()) {
                    var xml = new dpz3.Xml.XmlNode("xml");
                    doc.Nodes.Add(xml);
                    var packages = xml.AddNode("packages");
                    dpz3.File.UTF8File.WriteAllText(fileXml, doc.InnerXml);
                }
            }

            // 读取配置文件
            string szXml    = dpz3.File.UTF8File.ReadAllText(fileXml);
            bool   isUpdate = false;

            using (var doc = dpz3.Xml.Parser.GetDocument(szXml)) {
                var xml      = doc["xml"];
                var packages = xml["packages"];
                foreach (var package in packages.GetNodesByTagName("package", false))
                {
                    string packageName    = package.Attr["name"];
                    string packageInstall = package.Attr["version"];
                    // 添加一个包信息
                    _packages.Add(new ModularPackage(_mimes, folderPackage, packageName, packageInstall));
                }
                // 保存配置
                if (isUpdate)
                {
                    dpz3.File.UTF8File.WriteAllText(fileXml, doc.InnerXml);
                }
            }
        }
Beispiel #3
0
        // 卸载包
        private static void ListPacks(string path)
        {
            Console.WriteLine("[*] 初始化包管理 ...");

            string folderRoot    = $"{path}wwwroot";
            string folderPackage = $"{path}packages";

            if (!System.IO.Directory.Exists(folderRoot))
            {
                System.IO.Directory.CreateDirectory(folderRoot);
            }
            if (!System.IO.Directory.Exists(folderPackage))
            {
                System.IO.Directory.CreateDirectory(folderPackage);
            }

            // 判断并创建配置文件
            string fileXml = $"{folderPackage}{it.SplitChar}packages.xml";

            if (!System.IO.File.Exists(fileXml))
            {
                Console.WriteLine("[*] 正在创建包管理文件 ...");
                using (var doc = new dpz3.Xml.XmlDocument()) {
                    var xml = new dpz3.Xml.XmlNode("xml");
                    doc.Nodes.Add(xml);
                    var packages = xml.AddNode("packages");
                    dpz3.File.UTF8File.WriteAllText(fileXml, doc.InnerXml);
                }
            }

            // 读取配置文件
            string szXml = dpz3.File.UTF8File.ReadAllText(fileXml);

            Console.WriteLine($"[*] 读取包信息 ...");
            using (var doc = dpz3.Xml.Parser.GetDocument(szXml)) {
                var xml      = doc["xml"];
                var packages = xml["packages"];
                foreach (var package in packages.GetNodesByTagName("package", false))
                {
                    string packageName    = package.Attr["name"];
                    string packageInstall = package.Attr["version"];
                    Console.WriteLine($"[*] 包 {packageName} 安装版本:{packageInstall}");
                }
            }
        }
Beispiel #4
0
        // 重建数据库
        private static void BuildDatabase(string path)
        {
            Console.WriteLine("[*] 初始化包管理 ...");

            string folderRoot    = $"{path}wwwroot";
            string folderPackage = $"{path}packages";

            if (!System.IO.Directory.Exists(folderRoot))
            {
                System.IO.Directory.CreateDirectory(folderRoot);
            }
            if (!System.IO.Directory.Exists(folderPackage))
            {
                System.IO.Directory.CreateDirectory(folderPackage);
            }

            // 判断并创建配置文件
            string fileXml = $"{folderPackage}{it.SplitChar}packages.xml";

            if (!System.IO.File.Exists(fileXml))
            {
                Console.WriteLine("[*] 正在创建包管理文件 ...");
                using (var doc = new dpz3.Xml.XmlDocument()) {
                    var xml = new dpz3.Xml.XmlNode("xml");
                    doc.Nodes.Add(xml);
                    var packages = xml.AddNode("packages");
                    dpz3.File.UTF8File.WriteAllText(fileXml, doc.InnerXml);
                }
            }

            // 读取配置文件
            string szXml = dpz3.File.UTF8File.ReadAllText(fileXml);

            Console.WriteLine($"[*] 读取包信息 ...");
            using (var doc = dpz3.Xml.Parser.GetDocument(szXml)) {
                var xml      = doc["xml"];
                var packages = xml["packages"];
                foreach (var package in packages.GetNodesByTagName("package", false))
                {
                    string packageName    = package.Attr["name"];
                    string packageVersion = package.Attr["version"];
                    string folderInstall  = $"{folderPackage}{it.SplitChar}{packageName}{it.SplitChar}{packageVersion}";
                    // 进行Xorm数据库安装更新
                    string folderInstallXorm = $"{folderInstall}{it.SplitChar}xorm";
                    if (System.IO.Directory.Exists(folderInstallXorm))
                    {
                        // 进行包内静态文件的复制
                        Console.WriteLine("[*] 正在进行数据库升级 ...");
                        string folderConf = $"{path}conf";
                        using (var db = dpz3.db.Database.LoadFromConf($"{folderConf}{it.SplitChar}db.cfg", "entity")) {
                            using (var dbc = new dpz3.db.Connection(db)) {
                                string[] fileXmls = System.IO.Directory.GetFiles(folderInstallXorm, "*.xml");
                                foreach (var file in fileXmls)
                                {
                                    Console.WriteLine($"[*] 正在检测数据库配置文件 {file} ...");
                                    string txtXml = dpz3.File.UTF8File.ReadAllText(file, false);
                                    using (var table = new dpz3.XOrm.StandaloneTable(txtXml)) {
                                        UpdateDatabase(dbc, table);
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
Beispiel #5
0
        // 卸载包
        private static void UninstallPack(string path, string name)
        {
            // 检测参数完整性
            if (name.IsNoneOrNull())
            {
                Console.WriteLine("[!] 缺少包名称");
                return;
            }

            Console.WriteLine("[*] 初始化包管理 ...");

            string folderRoot    = $"{path}wwwroot";
            string folderPackage = $"{path}packages";

            if (!System.IO.Directory.Exists(folderRoot))
            {
                System.IO.Directory.CreateDirectory(folderRoot);
            }
            if (!System.IO.Directory.Exists(folderPackage))
            {
                System.IO.Directory.CreateDirectory(folderPackage);
            }

            // 判断并创建配置文件
            string fileXml = $"{folderPackage}{it.SplitChar}packages.xml";

            if (!System.IO.File.Exists(fileXml))
            {
                Console.WriteLine("[*] 正在创建包管理文件 ...");
                using (var doc = new dpz3.Xml.XmlDocument()) {
                    var xml = new dpz3.Xml.XmlNode("xml");
                    doc.Nodes.Add(xml);
                    var packages = xml.AddNode("packages");
                    dpz3.File.UTF8File.WriteAllText(fileXml, doc.InnerXml);
                }
            }

            // 读取配置文件
            string szXml    = dpz3.File.UTF8File.ReadAllText(fileXml);
            bool   isUpdate = false;

            using (var doc = dpz3.Xml.Parser.GetDocument(szXml)) {
                var xml      = doc["xml"];
                var packages = xml["packages"];
                foreach (var package in packages.GetNodesByTagName("package", false))
                {
                    string packageName = package.Attr["name"];
                    if (packageName == name)
                    {
                        string packageInstall = package.Attr["version"];
                        string folderInstall  = $"{folderPackage}{it.SplitChar}{packageName}{it.SplitChar}{packageInstall}";
                        Console.WriteLine($"[*] 读取包版本 {packageName} 安装版本:{packageInstall}");
                        // 进行包的解压
                        Console.WriteLine($"[-] 包信息删除 {packageName} ...");
                        package.Parent.Nodes.Remove(package);
                        try {
                            // 判断安装目录是否存在
                            if (System.IO.Directory.Exists(folderInstall))
                            {
                                // 删除已安装目录
                                Console.WriteLine($"[-] 清理已安装目录 {folderInstall} ...");
                                System.IO.Directory.Delete(folderInstall, true);
                            }
                        } catch (Exception ex) {
                            Console.WriteLine($"[!] 清理发生异常 {ex.Message}");
                        }
                        isUpdate = true;
                        break;
                    }
                }
                // 保存配置
                if (isUpdate)
                {
                    dpz3.File.UTF8File.WriteAllText(fileXml, doc.InnerXml);
                }
            }
        }
Beispiel #6
0
        // 安装包
        private static void InstallPack(string path, string name, string version, string url = null)
        {
            // 检测参数完整性
            if (name.IsNoneOrNull())
            {
                Console.WriteLine("[!] 缺少包名称");
                return;
            }
            if (version.IsNoneOrNull())
            {
                Console.WriteLine("[!] 缺少包版本");
                return;
            }

            Console.WriteLine("[*] 初始化包管理 ...");

            string folderRoot    = $"{path}wwwroot";
            string folderDown    = $"{path}downloads";
            string folderPackage = $"{path}packages";

            if (!System.IO.Directory.Exists(folderRoot))
            {
                System.IO.Directory.CreateDirectory(folderRoot);
            }
            if (!System.IO.Directory.Exists(folderDown))
            {
                System.IO.Directory.CreateDirectory(folderDown);
            }
            if (!System.IO.Directory.Exists(folderPackage))
            {
                System.IO.Directory.CreateDirectory(folderPackage);
            }

            // 判断并创建配置文件
            string fileXml = $"{folderPackage}{it.SplitChar}packages.xml";

            if (!System.IO.File.Exists(fileXml))
            {
                Console.WriteLine("[*] 正在创建包管理文件 ...");
                using (var doc = new dpz3.Xml.XmlDocument()) {
                    var xml = new dpz3.Xml.XmlNode("xml");
                    doc.Nodes.Add(xml);
                    var packages = xml.AddNode("packages");
                    dpz3.File.UTF8File.WriteAllText(fileXml, doc.InnerXml);
                }
            }

            // 读取配置文件
            string szXml    = dpz3.File.UTF8File.ReadAllText(fileXml);
            bool   isNew    = true;
            bool   isUpdate = false;

            using (var doc = dpz3.Xml.Parser.GetDocument(szXml)) {
                var xml      = doc["xml"];
                var packages = xml["packages"];
                foreach (var package in packages.GetNodesByTagName("package", false))
                {
                    string packageName = package.Attr["name"];
                    if (packageName == name)
                    {
                        isNew = false;
                        //string packageDownload = package.Attr["download"];
                        string packageInstall = package.Attr["version"];
                        string folderInstall  = $"{folderPackage}{it.SplitChar}{packageName}{it.SplitChar}{packageInstall}";
                        Console.WriteLine($"[*] 读取包版本 {packageName} 待安装版本:{version} 安装版本:{packageInstall}");
                        if (packageInstall != name)
                        {
                            // 进行包的解压
                            Console.WriteLine($"[+] 包安装 {packageName} 版本:{version} ...");
                            string fileDown            = $"{folderDown}{it.SplitChar}{packageName}-{version}.zip";
                            string folderInstallBefore = folderInstall;
                            folderInstall = $"{folderPackage}{it.SplitChar}{packageName}{it.SplitChar}{version}";
                            if (!System.IO.Directory.Exists(folderDown))
                            {
                                System.IO.Directory.CreateDirectory(folderDown);
                            }
                            ZipFile.ExtractToDirectory(fileDown, folderInstall, true);
                            //// 进行包的安装
                            //string folderInstallRoot = $"{folderInstall}{it.SplitChar}wwwroot";
                            //if (System.IO.Directory.Exists(folderInstallRoot)) {
                            //    // 进行包内静态文件的复制
                            //    Console.WriteLine("[*] 正在复制 wwwroot 文件夹 ...");
                            //    CopyFolder(folderInstallRoot, folderRoot);
                            //}
                            // 进行Xorm数据库安装更新
                            string folderInstallXorm = $"{folderInstall}{it.SplitChar}xorm";
                            if (System.IO.Directory.Exists(folderInstallXorm))
                            {
                                // 进行包内静态文件的复制
                                Console.WriteLine("[*] 正在进行数据库升级 ...");
                                string folderConf = $"{path}conf";
                                using (var db = dpz3.db.Database.LoadFromConf($"{folderConf}{it.SplitChar}db.cfg", "entity")) {
                                    using (var dbc = new dpz3.db.Connection(db)) {
                                        string[] fileXmls = System.IO.Directory.GetFiles(folderInstallXorm, "*.xml");
                                        foreach (var file in fileXmls)
                                        {
                                            Console.WriteLine($"[*] 正在检测数据库配置文件 {file} ...");
                                            string txtXml = dpz3.File.UTF8File.ReadAllText(file, false);
                                            using (var table = new dpz3.XOrm.StandaloneTable(txtXml)) {
                                                UpdateDatabase(dbc, table);
                                            }
                                        }
                                    }
                                }
                            }
                            try {
                                // 判断是否为重新安装
                                if (folderInstall != folderInstallBefore)
                                {
                                    // 判断之前安装目录是否存在
                                    if (System.IO.Directory.Exists(folderInstallBefore))
                                    {
                                        // 删除已安装目录
                                        Console.WriteLine($"[-] 清理已安装目录 {folderInstallBefore} ...");
                                        System.IO.Directory.Delete(folderInstallBefore, true);
                                    }
                                }
                            } catch (Exception ex) {
                                Console.WriteLine($"[!] 清理发生异常 {ex.Message}");
                            }
                            try {
                                // 判断安装文件是否存在
                                if (System.IO.File.Exists(fileDown))
                                {
                                    // 删除安装文件
                                    Console.WriteLine($"[-] 清理安装文件 {fileDown} ...");
                                    System.IO.File.Delete(fileDown);
                                }
                            } catch (Exception ex) {
                                Console.WriteLine($"[!] 清理发生异常 {ex.Message}");
                            }
                            // 更新版本号
                            package.Attr["version"] = version;
                            isUpdate = true;
                        }
                    }
                }
                // 当包信息不存在时,新增包信息
                if (isNew)
                {
                    // 建立新的节点
                    var package = packages.AddNode("package");
                    package.Attr["name"]    = name;
                    package.Attr["version"] = version;
                    string folderInstall = $"{folderPackage}{it.SplitChar}{name}{it.SplitChar}{version}";
                    // 进行包的解压
                    Console.WriteLine($"[+] 包安装 {name} 版本:{version} ...");
                    string fileDown = $"{folderDown}{it.SplitChar}{name}-{version}.zip";
                    folderInstall = $"{folderPackage}{it.SplitChar}{name}{it.SplitChar}{version}";
                    if (!System.IO.Directory.Exists(folderDown))
                    {
                        System.IO.Directory.CreateDirectory(folderDown);
                    }
                    // 加压到指定文件夹
                    ZipFile.ExtractToDirectory(fileDown, folderInstall, true);
                    // 进行包的安装
                    // string folderInstallRoot = $"{folderInstall}{it.SplitChar}wwwroot";
                    //if (System.IO.Directory.Exists(folderInstallRoot)) {
                    //    // 进行包内静态文件的复制
                    //    // CopyFolder(folderInstallRoot, folderRoot);
                    //}
                    // 进行Xorm数据库安装更新
                    string folderInstallXorm = $"{folderInstall}{it.SplitChar}xorm";
                    if (System.IO.Directory.Exists(folderInstallXorm))
                    {
                        // 进行包内静态文件的复制
                        Console.WriteLine("[*] 正在进行数据库升级 ...");
                        string folderConf = $"{path}conf";
                        using (var db = dpz3.db.Database.LoadFromConf($"{folderConf}{it.SplitChar}db.cfg", "entity")) {
                            using (var dbc = new dpz3.db.Connection(db)) {
                                string[] fileXmls = System.IO.Directory.GetFiles(folderInstallXorm, "*.xml");
                                foreach (var file in fileXmls)
                                {
                                    Console.WriteLine($"[*] 正在检测数据库配置文件 {file} ...");
                                    string txtXml = dpz3.File.UTF8File.ReadAllText(file, false);
                                    using (var table = new dpz3.XOrm.StandaloneTable(txtXml)) {
                                        UpdateDatabase(dbc, table);
                                    }
                                }
                            }
                        }
                    }
                    try {
                        // 判断安装文件是否存在
                        if (System.IO.File.Exists(fileDown))
                        {
                            // 删除安装文件
                            Console.WriteLine($"[-] 清理安装文件 {fileDown} ...");
                            System.IO.File.Delete(fileDown);
                        }
                    } catch (Exception ex) {
                        Console.WriteLine($"[!] 清理发生异常 {ex.Message}");
                    }
                    isUpdate = true;
                }
                // 保存配置
                if (isUpdate)
                {
                    dpz3.File.UTF8File.WriteAllText(fileXml, doc.InnerXml);
                }
            }
        }