/// <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; } }
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); } } }
private void menuItemOpenFolder_Click(object sender, EventArgs e) { if (File.Exists(textEditorControl1.FileName)) { CmdHelper.Execute(string.Format("explorer.exe {0}", Path.GetDirectoryName(textEditorControl1.FileName))); } }
/// <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); }
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()); }
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; } }
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); }
/// <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); }
/// <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; } }
/// <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); }
/// <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; } }
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); }
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(); } } }
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); }
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(); } } }