/// <summary>
        /// 生成PEM格式的p7证书(链)
        /// </summary>
        /// <param name="destPemFilePath">要生成的目标p7文件完整路径</param>
        /// <param name="crlFilePath">证书撤销列表文件完整路径</param>
        /// <param name="certFilePaths">要封装的证书文件完整路径列表</param>
        public void GenP7Cert(string destPemFilePath, string crlFilePath, params string[] certFilePaths)
        {
            destPemFilePath = destPemFilePath.Replace('\\', '/');
            crlFilePath     = crlFilePath.Replace('\\', '/');

            var arguments = " crl2pkcs7  ";

            arguments += " -out " + destPemFilePath;
            if (String.IsNullOrWhiteSpace(crlFilePath))
            {
                arguments += " -nocrl";
            }
            else
            {
                arguments += " -in " + crlFilePath;
            }

            foreach (var certFilePath in certFilePaths)
            {
                if (!String.IsNullOrWhiteSpace(certFilePath))
                {
                    arguments += " -certfile " + certFilePath;
                }
            }
            var errorText  = "";
            var resultText = CmdHelper.Execute(this.openSSLFilePath, arguments, out errorText);

            if (errorText.Contains("error"))
            {
                var ex = new Exception(errorText);
                throw ex;
            }
        }
Exemplo n.º 2
0
        private void menuItemBuildPdf_Click(object sender, EventArgs e)
        {
            IList <PDTable> tableList = new List <PDTable>();
            string          title     = string.Empty;
            TreeNode        node      = tv.SelectedNode;

            if (node.Tag is PDModel)
            {
                PDModel m = node.Tag as PDModel;
                tableList = m.AllTableList;
                title     = m.Name;
            }
            if (node.Tag is PDPackage)
            {
                PDPackage p = node.Tag as PDPackage;
                tableList = p.TableList;
                title     = p.Name;
            }

            saveFileDialog1.FileName = title;
            saveFileDialog1.Filter   = "pdf文件(*.pdf)|*.pdf|所有文件(*.*)|*.*";

            if (saveFileDialog1.ShowDialog() == DialogResult.OK)
            {
                string fileName = saveFileDialog1.FileName;

                iTextExporter exporter = new iTextExporter(fileName);
                exporter.PDModel2Pdf(tableList, title);

                if (MsgBox.ShowQuestionMessage("数据库文档生成成功,是否打开文档", "提示信息") == DialogResult.Yes)
                {
                    CmdHelper.Execute(fileName);
                }
            }
        }
Exemplo n.º 3
0
 private void menuItemOpenFolder_Click(object sender, EventArgs e)
 {
     if (File.Exists(textEditorControl1.FileName))
     {
         CmdHelper.Execute(string.Format("explorer.exe {0}", Path.GetDirectoryName(textEditorControl1.FileName)));
     }
 }
Exemplo n.º 4
0
        /// <summary>
        /// 获取OpenSSL版本
        /// </summary>
        /// <returns>OpenSSL版本</returns>
        public string GetOpenSSLVersion()
        {
            var version = CmdHelper.Execute(this.openSSLFilePath, "version");

            version = version.TrimStart("OpenSSL".ToCharArray())
                      .TrimEnd(Environment.NewLine.ToCharArray())
                      .Trim();
            return(version);
        }
Exemplo n.º 5
0
        public void ExecuteTest()
        {
            CmdHelper     cmd           = new CmdHelper(@"E:\Code-CSharp\Log");
            StringBuilder stringBuilder = new StringBuilder();

            stringBuilder.Append("E: \n");
            stringBuilder.Append(@"cd E:\Code-CSharp\MKTBK");
            stringBuilder.Append("\n");
            stringBuilder.Append("dotnet build");

            cmd.Execute(stringBuilder.ToString());
        }
Exemplo n.º 6
0
        public string nuosoo()
        {
            CmdHelper     cmd           = new CmdHelper(@"F:\Code-Product\mkcommon\Log");
            StringBuilder stringBuilder = new StringBuilder();

            stringBuilder.Append("F: &");
            stringBuilder.Append(@"cd F:\Code-Product\mkcommon");
            stringBuilder.Append("\n");
            stringBuilder.Append("dotnet build MKCommon.sln ");

            cmd.Execute(stringBuilder.ToString());

            return(Guid.NewGuid().ToString());
        }
        /// <summary>
        /// 证书格式转换PEM2DER
        /// </summary>
        /// <param name="pemCertFilePath">PEM格式证书文件完整路径</param>
        /// <param name="derCertFilePath">DER格式证书文件完整路径</param>
        public void PemX509CertToDerX509Cert(string pemCertFilePath, string derCertFilePath)
        {
            pemCertFilePath = pemCertFilePath.Replace('\\', '/');
            derCertFilePath = derCertFilePath.Replace('\\', '/');
            var arguments  = " x509 -in " + pemCertFilePath + " -inform PEM -out " + derCertFilePath + " -outform DER";
            var errorText  = "";
            var resultText = CmdHelper.Execute(this.openSSLFilePath, arguments, out errorText);

            if (errorText.Contains("error"))
            {
                var ex = new Exception(errorText);
                throw ex;
            }
        }
Exemplo n.º 8
0
        private void btnOK_Click(object sender, EventArgs e)
        {
            List <SOTable> list = new List <SOTable>();

            foreach (object item in listBox2.Items)
            {
                list.Add(item as SOTable);
            }
            if (list.Count == 0)
            {
                return;
            }

            if (rbtnPdf.Checked)
            {
                saveFileDialog1.Filter   = "pdf文件(*.pdf)|*.pdf|所有文件(*.*)|*.*";
                saveFileDialog1.FileName = CurrentDatabase.Name;
                if (saveFileDialog1.ShowDialog() == DialogResult.OK)
                {
                    string fileName = saveFileDialog1.FileName;

                    iTextExporter exporter = new iTextExporter(fileName);
                    exporter.DbSchema2Pdf(currentSchema, CurrentDatabase, list);

                    if (MessageBox.Show("数据库文档生成成功,是否打开文档", "提示信息", MessageBoxButtons.YesNo, MessageBoxIcon.Information) == DialogResult.Yes)
                    {
                        CmdHelper.Execute(fileName);
                    }
                }
            }

            if (rbtnWord.Checked)
            {
                saveFileDialog1.Filter   = "rtf文件(*.rtf)|*.rtf|所有文件(*.*)|*.*";
                saveFileDialog1.FileName = CurrentDatabase.Name;
                if (saveFileDialog1.ShowDialog() == DialogResult.OK)
                {
                    string fileName = saveFileDialog1.FileName;

                    iTextExporter exporter = new iTextExporter(fileName);
                    exporter.DbSchema2Rtf(currentSchema, CurrentDatabase, list);

                    if (MessageBox.Show("数据库文档生成成功,是否打开文档", "提示信息", MessageBoxButtons.YesNo, MessageBoxIcon.Information) == DialogResult.Yes)
                    {
                        CmdHelper.Execute(fileName);
                    }
                }
            }
        }
        /// <summary>
        /// 获取证书吊销列表文件的内容
        /// </summary>
        /// <param name="crlFilePath">证书吊销列表文件完整路径</param>
        /// <returns>证书吊销列表文件的内容</returns>
        public string GetCRLText(string crlFilePath)
        {
            crlFilePath = crlFilePath.Replace('\\', '/');
            var arguments  = " crl -in " + crlFilePath + " -text -noout ";
            var errorText  = "";
            var resultText = CmdHelper.Execute(this.openSSLFilePath, arguments, out errorText);

            if (errorText.Contains("error"))
            {
                var ex = new Exception(errorText);
                throw ex;
            }

            return(resultText);
        }
Exemplo n.º 10
0
        /// <summary>
        /// 获取证书请求文件中的信息
        /// </summary>
        /// <param name="reqFilePath">证书请求文件完整路径</param>
        /// <returns>证书请求文件中的信息</returns>
        public string GetRequestText(string reqFilePath)
        {
            reqFilePath = reqFilePath.Replace('\\', '/');
            var errorText = "";
            var arguments = " req -in " + reqFilePath + " -text -noout ";
            //+ " -config " + this.configFilePath.Replace('\\', '/');
            var resultText = CmdHelper.Execute(this.openSSLFilePath, arguments, out errorText);

            if (errorText.Contains("error"))
            {
                var ex = new Exception(reqFilePath + Environment.NewLine + errorText);
                throw ex;
            }

            return(resultText);
        }
Exemplo n.º 11
0
        /// <summary>
        /// 对文件进行MD5运算
        /// </summary>
        /// <param name="filePath">文件完整路径</param>
        /// <returns>文件的MD5结果</returns>
        public string MD5File(string filePath)
        {
            filePath = filePath.Replace('\\', '/');
            var arguments  = " md5 " + filePath;
            var errorText  = "";
            var resultText = CmdHelper.Execute(this.openSSLFilePath, arguments, out errorText);

            if (errorText.Contains("error"))
            {
                var ex = new Exception(errorText);
                throw ex;
            }
            var md5Text = resultText.Substring(resultText.IndexOf('=') + 1).TrimEnd('\n').Trim().ToUpper();

            return(md5Text);
        }
        /// <summary>
        /// 根据证书请求文件,签发一个证书
        /// </summary>
        /// <param name="reqFilePath">证书请求文件</param>
        /// <param name="caDataDir">CAData目录</param>
        /// <param name="caPassword">CA私钥保护口令</param>
        /// <returns></returns>
        public string SignCert(string reqFilePath, string caPassword)
        {
            var requestObj = this.GetRequestObj(reqFilePath);

            reqFilePath = reqFilePath.Replace('\\', '/');
            var myCADataDir = this.caDataDir.Replace('\\', '/');
            var reqFileName = reqFilePath.Substring(reqFilePath.LastIndexOf('/') + 1);

            var certFileDir = myCADataDir.TrimEnd('/') + "/certs";
            // -notext 不输出明文信息到证书文件中
            var arguments = " ca -batch -config " + this.configFilePath.Replace('\\', '/')
                            + " -in " + reqFilePath + " -passin pass:"******" -outdir " + certFileDir
                            + " -notext ";

            if (requestObj.SubjectType == SubjectType.User)
            {
                arguments += " -extensions usr_cert";
            }
            else
            {
                arguments += " -extensions v3_ca";
            }
            var errorText  = "";
            var resultText = CmdHelper.Execute(this.openSSLFilePath, arguments, out errorText);

            if (errorText.Contains("error"))
            {
                var ex = new Exception(errorText);
                throw ex;
            }

            var lastCert = this.GetCertList().Last();

            //签发证书后,将证书申请文件从reqwait目录移到reqsigned
            var signed_reqFileName = reqFileName.Insert(reqFileName.IndexOf('.'), "-cert" + lastCert.SerialNo);
            var destFilePath       = myCADataDir.TrimEnd('/') + "/reqsigned/" + signed_reqFileName;

            //destFilePath = FileHelper.GetUniqueFilePath(destFilePath);
            if (File.Exists(destFilePath))
            {
                File.Delete(destFilePath);
            }
            File.Move(reqFilePath, destFilePath);

            return(resultText);
        }
        /// <summary>
        /// 生成CRL(证书撤销列表)文件
        /// </summary>
        /// <param name="crlFilePath">要生成的证书撤销列表文件完整路径</param>
        /// <param name="caPassword">CA私钥保护密码</param>
        public void GenCRL(string crlFilePath, string caPassword)
        {
            crlFilePath = crlFilePath.Replace('\\', '/');
            var myCADataDir = this.caDataDir.Replace('\\', '/');

            var arguments = " ca -gencrl -crldays 7 -out " + crlFilePath
                            + " -config " + this.configFilePath.Replace('\\', '/')
                            + " -passin pass:"******"";
            var resultText = CmdHelper.Execute(this.openSSLFilePath, arguments, out errorText);

            if (errorText.Contains("error"))
            {
                var ex = new Exception(errorText);
                throw ex;
            }
        }
Exemplo n.º 14
0
        /// <summary>
        /// 生成证书申请文件
        /// </summary>
        /// <param name="requestObj"></param>
        public void GenRequestFile(Request requestObj)
        {
            var password    = "******";
            var reqFilePath = this.caDataDir.TrimEnd('\\') + @"\temp\req.pem";
            var keyFilePath = this.caDataDir.TrimEnd('\\') + @"\temp\key.pem";

            reqFilePath = reqFilePath.Replace('\\', '/');
            keyFilePath = keyFilePath.Replace('\\', '/');
            var errorText = "";
            var arguments = " req -new -newkey rsa:" + requestObj.KeyBitLength
                            + " -keyout " + keyFilePath + " -passout pass:"******" -out " + reqFilePath
                            + " -subj " + requestObj.SubjectText
                            + " -batch"
                            + " -config " + this.configFilePath.Replace('\\', '/');

            switch (requestObj.SubjectType)
            {
            case SubjectType.RootCA:
                break;

            case SubjectType.SubCA:
                arguments += " -reqexts v3_req_subca ";
                break;

            case SubjectType.User:
            default:
                arguments += " -reqexts v3_req_user ";
                break;
            }
            var resultText = CmdHelper.Execute(this.openSSLFilePath, arguments, out errorText);

            if (errorText.Contains("error"))
            {
                var ex = new Exception(reqFilePath + Environment.NewLine + errorText);
                throw ex;
            }

            var md5String       = this.MD5File(reqFilePath);
            var dst_reqFilePath = this.caDataDir.TrimEnd('\\') + @"\reqwait\req" + md5String + ".pem";
            var dst_keyFilePath = this.caDataDir.TrimEnd('\\') + @"\reqprivate\key" + md5String + ".pem";

            File.Copy(reqFilePath, dst_reqFilePath, true);
            File.Copy(keyFilePath, dst_keyFilePath, true);
        }
Exemplo n.º 15
0
        /// <summary>
        /// 生成自签名的CA证书和私钥
        /// </summary>
        public void GenCACert(string password)
        {
            var cakeyFile  = this.caDataDir.Replace('\\', '/').TrimEnd('/') + "/private/cakey.pem";
            var cacertFile = this.caDataDir.Replace('\\', '/').TrimEnd('/') + "/cacert.pem";

            var arguments = " req -config " + this.configFilePath.Replace('\\', '/')
                            + " -x509 -newkey rsa:2048 -keyout " + cakeyFile + " -passout pass:"******" -out " + cacertFile
                            + " -subj /CN=RootCA";
            var errorText = "";
            var result    = CmdHelper.Execute(this.openSSLFilePath, arguments, out errorText);

            if (errorText.Contains("error"))
            {
                var ex = new Exception(errorText);
                throw ex;
            }
        }
        public bool CertificateIssue()
        {
            string organizationUnit = FindGroup();

            string username = Formatter.ParseName(Thread.CurrentPrincipal.Identity.Name);

            string CA = "SmartCardCA";

            Random random   = new Random();
            string password = (random.Next(1000, 9999)).ToString();

            Console.WriteLine("Please enter this code - " + password);

            string path = @"C:\Program Files (x86)\Windows Kits\10\bin\10.0.17763.0\x86";
            string cmd  = $@"/c makecert -sv {username}.pvk -iv {CA}.pvk -n ""CN = {username}, OU={organizationUnit}"" -pe -ic {CA}.cer {username}.cer -sr localmachine -ss My -sky exchange";

            cmd = cmd.Replace(@"\", "");
            CmdHelper.Execute(path, cmd);
            CmdHelper.Execute(path, $"/c pvk2pfx.exe /pvk {username}.pvk /pi {password} /spc {username}.cer /pfx {username}.pfx");
            //CmdHelper.Execute(path, $"/c CertMgr.exe / add {username}.cer / s / r localmachine personal");

            CmdHelper.Execute(path, $"/c makecert -sv {username}Sign.pvk -iv {CA}.pvk -n \"CN = {username}Sign\" -pe -ic {CA}.cer {username}Sign.cer -sr localmachine -ss My -sky signature");
            CmdHelper.Execute(path, $"/c pvk2pfx.exe /pvk {username}Sign.pvk /pi {password} /spc {username}Sign.cer /pfx {username}Sign.pfx");
            //CmdHelper.Execute(path, $"/c CertMgr.exe / add {username}Sign.cer / s / r localmachine personal");

            X509Certificate2 cert = CertManager.GetCertificateFromStorage(StoreName.My, StoreLocation.LocalMachine, username);

            User user = new User
            {
                Certificate        = cert,
                Name               = username,
                PIN                = PinToHash(username),
                Cash               = 1,
                OrganizationalUnit = organizationUnit,
                TimeOfAdding       = DateTime.Now,
            };

            UserDataBase.users.Add(user);
            XMLHelper.InsertAllUserToXML(UserDataBase.users, Environment.CurrentDirectory + @"\Users.xml");

            return(true);
        }
        /// <summary>
        /// 生成p12证书文件
        /// </summary>
        /// <param name="keyFilePath">私钥文件完整路径</param>
        /// <param name="certFilePath">证书文件完整路径</param>
        /// <param name="p12FilePath">要生成的p12文件完整路径</param>
        public void GenP12Cert(string keyFilePath, string certFilePath, string p12FilePath)
        {
            keyFilePath  = keyFilePath.Replace('\\', '/');
            certFilePath = certFilePath.Replace('\\', '/');
            p12FilePath  = p12FilePath.Replace('\\', '/');
            var password = "******";

            var arguments = " pkcs12 -export "
                            + " -inkey " + keyFilePath
                            + " -passin pass:"******" -passout pass:"******" -in " + certFilePath
                            + " -out " + p12FilePath;
            var errorText  = "";
            var resultText = CmdHelper.Execute(this.openSSLFilePath, arguments, out errorText);

            if (errorText.Contains("error"))
            {
                var ex = new Exception(errorText);
                throw ex;
            }
        }
Exemplo n.º 18
0
        public bool ExportTask(string home, string backup_dir, string log, string cmd)
        {
            bool          bSuccess = false;
            List <string> cmds     = new List <string>();

            cmds.Add(string.Format("set DM_HOME={0}", home));
            cmds.Add(@"set PATH=%path%;%DM_HOME%\bin");
            cmds.Add(cmd);
            CmdHelper.Execute(cmds.ToArray());
            var logfile = Path.Combine(backup_dir, log);

            if (File.Exists(logfile))
            {
                string text = File.ReadAllText(logfile, EncodingType.GetType(logfile));
                Console.WriteLine(text);

                string pattern = @"共导出[\s\d]+个SCHEMA";
                if (Regex.IsMatch(text, pattern))
                {
                    bSuccess = true;
                }
            }
            return(bSuccess);
        }
Exemplo n.º 19
0
        public void ExecuteImport(long id)
        {
            using (var ctx = new DbMonitorEntities())
            {
                var me  = ctx.MirrorExport.Find(id);
                var dic = ctx.Dictionary.Where(d => d.DTypeCode == "OracleExport" && d.DEnable == 1).ToList();
                var sc  = ctx.SessionConnection.Find(me.SCID);

                me.MEImportStatus = "开始导入";
                me.EditingTime    = DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss");
                me.MEImportTime   = me.EditingTime;
                ctx.SaveChanges();

                List <string> cmds = new List <string>();
                //变量设置是必须的
                string directory   = dic.Where(d => d.DCode == "directory").FirstOrDefault().DName,
                       oracle_base = dic.Where(d => d.DCode == "oracle_base").FirstOrDefault().DName,
                       oracle_home = dic.Where(d => d.DCode == "oracle_home").FirstOrDefault().DName,
                       oracle_sid  = dic.Where(d => d.DCode == "oracle_sid").FirstOrDefault().DName,
                       user_local  = dic.Where(d => d.DCode == "user").FirstOrDefault().DName,
                       pwd_local   = dic.Where(d => d.DCode == "pwd").FirstOrDefault().DName;

                cmds.Add(string.Format("set ORACLE_BASE={0}", oracle_base));
                cmds.Add(string.Format("set ORACLE_HOME=%ORACLE_BASE%{0}", oracle_home));
                cmds.Add(string.Format("set ORACLE_SID={0}", oracle_sid));
                cmds.Add(@"set PATH=%path%;%ORACLE_HOME%\bin");

                string file = me.MEFileName, implog = me.MELogFile.Replace(".log", "") + "_imp.log";
                //使用StringBuilder注意参数之间的空格
                StringBuilder sbExp = new StringBuilder();
                sbExp.AppendFormat("%ORACLE_HOME%\\bin\\impdp {0}/{1} directory={2} dumpfile={3} logfile={4}",
                                   user_local, pwd_local, directory, file, implog);

                cmds.Add(sbExp.ToString());
                CmdHelper.Execute(cmds.ToArray());

                var backup_dir = dic.Where(d => d.DCode == "backup_dir").FirstOrDefault().DName;
                var logfile    = Path.Combine(backup_dir, implog);
                me.MEImportLogFile = implog;

                bool bOK = false;
                if (File.Exists(logfile))
                {
                    string text = File.ReadAllText(logfile, EncodingType.GetType(logfile));

                    string pattern = @"作业[\s\S]+完成";

                    if (Regex.IsMatch(text, pattern))
                    {
                        bOK = true;
                    }
                }
                if (bOK)
                {
                    me.MEImportStatus = "导入成功";
                    me.EditingTime    = DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss");
                    ctx.SaveChanges();
                }
                else
                {
                    me.MEImportStatus = "导入失败";
                    me.EditingTime    = DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss");
                    ctx.SaveChanges();
                }
            }
        }
Exemplo n.º 20
0
        private string DoBuild()
        {
            backgroundWorkerGenerate.ReportProgress(1, "开始生成!");

            var cmdString = "bee {0} {1} -driver=\"mysql\" -conn=\"{2}:{3}@tcp({4}:{5})/{6}\"";

            if (currentDatabase.Parent.DbProvider.DatabaseType == DatabaseType.SQLite)
            {
                cmdString = "bee {0} {1} -driver=\"sqlite\" -conn=\"{2}\"";
            }

            string server = "127.0.0.1", port = "3306", user = "******", password = "", db = currentDatabase.Name;
            var    connectionString = currentDatabase.Parent.DbProvider.ConnectionString;
            var    conn             = connectionString.Split(';');

            #region 获取服务器信息
            foreach (var item in conn)
            {
                if (currentDatabase.Parent.DbProvider.DatabaseType == DatabaseType.MySql)
                {
                    var val = item.Split('=');
                    if (val[0].ToLower().Trim() == "server")
                    {
                        server = val[1].Trim();
                    }
                    if (val[0].ToLower().Trim() == "port")
                    {
                        port = val[1].Trim();
                    }
                    if (val[0].ToLower().Trim() == "id")
                    {
                        user = val[1].Trim();
                    }
                    if (val[0].ToLower().Trim() == "password")
                    {
                        password = val[1].Trim();
                    }
                    //if (val[0].ToLower().Trim() == "database")
                    //{
                    //    db = val[1].Trim();
                    //}
                }
                else if (currentDatabase.Parent.DbProvider.DatabaseType == DatabaseType.SQLite)
                {
                    var val = item.Split('=');
                    if (val[0].ToLower().Trim() == "data source")
                    {
                        server = val[1].Trim();
                        break;
                    }
                }
            }
            #endregion

            var result = string.Empty;
            var path   = GOPATH + (GOPATH.EndsWith(@"\") ? "src" : @"\src");

            if (rbWebProject.Checked)
            {
                List <string> temp = new List <string>();
                foreach (var item in this.listBox2.Items)
                {
                    temp.Add(item.ToString());
                }

                var cmd = string.Format(cmdString + " -level=3 -tables=\"{7}\"",
                                        " generate appcode ",
                                        string.Empty,
                                        user,
                                        password,
                                        server,
                                        port,
                                        db,
                                        string.Join(",", temp));

                var newCmd = "bee new " + txtProjectName.Text.Trim();
                result = CmdHelper.Execute(newCmd, path);

                if (result.Contains("success"))
                {
                    var msg = "正在生成剩余项";
                    Config.Console(msg + ",详细信息如下:\n" + result);

                    backgroundWorkerGenerate.ReportProgress(50, msg);
                    cmd = string.Format("cd /d \"{0}\" \r\n{1}", codePath, cmd);
                    CmdHelper.CreateBat(Config.TEMP_BAT_FILENAME, cmd);
                    //CmdHelper.RunApp(Config.TEMP_BAT_FILENAME, ProcessWindowStyle.Normal, codePath);
                    Config.MainForm.RunApp(Config.TEMP_BAT_FILENAME, codePath);

                    msg = "代码生成成功,是否打开目录?";
                    Config.Console(msg + "详细信息如下:\n" + result);
                    result = msg;
                }
                backgroundWorkerGenerate.ReportProgress(100, result);
            }
            else if (rbApiProject.Checked)
            {
                var cmd = string.Format(cmdString,
                                        "api",
                                        txtProjectName.Text.Trim(),
                                        user,
                                        password,
                                        server,
                                        port,
                                        db);

                if (currentDatabase.Parent.DbProvider.DatabaseType == DatabaseType.SQLite)
                {
                    cmd = string.Format(cmdString,
                                        "api",
                                        txtProjectName.Text.Trim(),
                                        server);
                }

                result = CmdHelper.Execute(cmd, path);

                var msg = "创建项目成功";
                if (result.Contains("success") && cbGenerateSwagger.Checked)
                {
                    msg = "正在生成Swagger";
                    Config.Console(msg + ",详细信息如下:\n" + result);

                    backgroundWorkerGenerate.ReportProgress(50, msg);
                    cmd  = string.Format("cd /d \"{0}\" \r\n", codePath);
                    cmd += "bee run -gendoc=true -downdoc=true";

                    CmdHelper.CreateBat(Config.TEMP_BAT_FILENAME, cmd);
                    //CmdHelper.RunApp(Config.TEMP_BAT_FILENAME, ProcessWindowStyle.Normal, codePath);
                    Config.MainForm.RunApp(Config.TEMP_BAT_FILENAME, codePath);

                    msg = "代码生成成功,是否打开目录?";
                    Config.Console(msg + "详细信息如下:\n" + result);
                    result = msg;
                }
                else
                {
                    msg = "代码生成失败,是否打开目录?";
                    Config.Console(msg + "详细信息如下:\n" + result);
                    result = msg;
                }

                backgroundWorkerGenerate.ReportProgress(100, result);
            }

            return(result);
        }
Exemplo n.º 21
0
        public void ExecuteExport(long id)
        {
            using (var ctx = new DbMonitorEntities())
            {
                var me  = ctx.MirrorExport.Find(id);
                var dic = ctx.Dictionary.Where(d => d.DTypeCode == "OracleExport" && d.DEnable == 1).ToList();
                var sc  = ctx.SessionConnection.Find(me.SCID);

                me.MEStatus    = "开始导出";
                me.EditingTime = DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss");
                ctx.SaveChanges();

                string dblink  = string.Format("dblink{0}", id),
                       user    = me.MEUser,
                       pwd     = me.MEPassword,
                       host    = sc.SCHostName,
                       service = sc.SCServiceName;
                long port      = sc.SCPort.Value;

                using (var dal = new OracleDAL(connStr))
                {
                    try
                    {
                        StringBuilder sbSql = new StringBuilder();
                        //存在就先删除
                        var cnt = Convert.ToInt32(dal.ExecuteScalar(string.Format("select count(1) from dba_db_links where db_link='{0}'", dblink.ToUpper())));
                        if (cnt > 0)
                        {
                            dal.ExecuteNonQuery(string.Format("drop public database link {0}", dblink.ToUpper()));
                        }

                        //再添加
                        sbSql.AppendFormat("create public database link {0} connect to {1} identified by {2} using",
                                           dblink, user, pwd);
                        sbSql.AppendFormat("'(DESCRIPTION =(ADDRESS_LIST =(ADDRESS =(PROTOCOL = TCP)(HOST = {0})(PORT = {1})))(CONNECT_DATA =(SERVICE_NAME = {2})))'",
                                           host, port, service);

                        dal.ExecuteNonQuery(sbSql.ToString());
                    }
                    catch (Exception ex)
                    {
                        me.MEStatus    = "创建dblink失败";
                        me.EditingTime = DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss");
                        ctx.SaveChanges();
                        LogHelper.WriteError(ex, string.Format("导出Oracle数据库时创建dblink失败,会话ID:{0}", id));
                        return;
                    }
                }
                me.MEStatus    = "创建dblink成功";
                me.EditingTime = DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss");
                ctx.SaveChanges();

                List <string> cmds = new List <string>();
                //变量设置是必须的
                string directory   = dic.Where(d => d.DCode == "directory").FirstOrDefault().DName,
                       oracle_base = dic.Where(d => d.DCode == "oracle_base").FirstOrDefault().DName,
                       oracle_home = dic.Where(d => d.DCode == "oracle_home").FirstOrDefault().DName,
                       oracle_sid  = dic.Where(d => d.DCode == "oracle_sid").FirstOrDefault().DName,
                       user_local  = dic.Where(d => d.DCode == "user").FirstOrDefault().DName,
                       pwd_local   = dic.Where(d => d.DCode == "pwd").FirstOrDefault().DName;

                cmds.Add(string.Format("set ORACLE_BASE={0}", oracle_base));
                cmds.Add(string.Format("set ORACLE_HOME=%ORACLE_BASE%{0}", oracle_home));
                cmds.Add(string.Format("set ORACLE_SID={0}", oracle_sid));
                cmds.Add(@"set PATH=%path%;%ORACLE_HOME%\bin");

                string file = me.MEFileName, log = me.MELogFile, schemas = me.MESchemas, timestamp = me.MEExportTime;
                //使用StringBuilder注意参数之间的空格
                StringBuilder sbExp = new StringBuilder();
                sbExp.AppendFormat("%ORACLE_HOME%\\bin\\expdp {0}/{1} directory={2} dumpfile={3} logfile={4} network_link={5} schemas={6} ",
                                   user_local, pwd_local, directory, file, log, dblink, schemas);
                sbExp.AppendFormat("flashback_time=\\\"to_timestamp('{0}','yyyy-mm-dd hh24:mi:ss')\\\"", timestamp);

                cmds.Add(sbExp.ToString());
                CmdHelper.Execute(cmds.ToArray());

                var backup_dir = dic.Where(d => d.DCode == "backup_dir").FirstOrDefault().DName;
                var logfile    = Path.Combine(backup_dir, log);

                if (File.Exists(logfile))
                {
                    string text = File.ReadAllText(logfile, EncodingType.GetType(logfile));
                    Console.WriteLine(text);

                    string pattern = @"作业[\s\S]+完成";

                    if (Regex.IsMatch(text, pattern))
                    {
                        me.MEStatus    = "导出成功";
                        me.EditingTime = DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss");
                        ctx.SaveChanges();
                    }
                    else
                    {
                        me.MEStatus    = "导出失败";
                        me.EditingTime = DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss");
                        ctx.SaveChanges();
                    }
                }
                else
                {
                    me.MEStatus    = "导出失败";
                    me.EditingTime = DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss");
                    ctx.SaveChanges();
                }
            }
        }