using Microsoft.Win32; using ryCommon; using ryCommonDb; using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Diagnostics; using System.Drawing; using System.Linq; using System.Text; using System.Threading; using System.Windows.Forms; using System.Xml; using WeifenLuo.WinFormsUI.Docking; using 开发辅助工具.Manager; namespace 开发辅助工具.Tools { public partial class FrmPathInfo : DockContent { string SelectPath = ""; public FrmPathInfo(string _Path) { SelectPath = _Path; InitializeComponent(); LoadPath(); } /// /// 获取毕方标准项目根路径 /// /// private string GetBFFolderPath() { var _path = SelectPath; if(System.IO.Directory.Exists(_path)) { if (System.IO.File.Exists(_path + "\\查看项目.ryp")) { return _path; } } while (true) { _path = System.IO.Path.GetDirectoryName(_path.TrimEnd('\\')).TrimEnd('\\'); if (System.IO.File.Exists(_path + "\\查看项目.ryp")) { return _path; } else { if (_path.Length < 4) { break; } } } return ""; } private void LoadPath() { var _path = GetBFFolderPath(); TxtFolder.Text = _path; if (_path!="") { var folder = _path; ryCommon.Ini ini = new Ini(folder + "\\查看项目.ryp"); TxtUSQ_Ver.Text = ini.ReadIni("project", "usqver"); AddPath(true,"Debug输出目录", "Bin\\Debug","包含调试信息的输出目录"); AddPath(true, "Release输出目录", "Bin\\Release", "不包含调试信息的输出目录"); AddPath(true,"源代码目录", "Source", "含有项目源码"); AddPath(true, "安装包目录", "Publish", "对外发布的安装文件"); AddPath(false, " - 免安装输出包目录", "Publish\\Green", "绿色免安装版本目录,通常为zip压缩包"); AddPath(false, " - 安装输出包目录", "Publish\\Install", "需要安装的版本目录,通常为exe压缩包"); AddPath(false, " - 输出底包目录", "Publish\\OriginalFiles", "输出底包,保留完整的文件结构,绿色版、安装包都以此来制作"); AddPath(false, " - 升级输出包目录", "Publish\\UpdateFile", "升级包目录,通常为zip压缩包,非完整输出包"); AddPath(true, "帮助文件目录", "Help", "帮助文档"); AddPath(true, "外部资源目录", "Res", "项目用到的资源备份,例外图标、图片、第三方项目"); AddPath(false, " - 第三方组件项目", "Res\\ThirdParty", "包含第三方组件的项目"); AddPath(false, " - 图片文件夹", "Res\\Images", "含下载的项目图片"); AddPath(true, "更新日志", "更新日志.txt", "当前项目更新日志文件"); AddPath(true, "更新日志", "更新日志.md", "当前项目更新日志文件"); AddPath(true, "更新日志", "CHANGELOG.md", "当前项目更新日志文件"); AddPath(true, "自述文件", "README.md", "当前项目自述文件"); void AddPath(bool bold,string name,string path,string des) { if (System.IO.File.Exists(folder + "\\" + path) || System.IO.Directory.Exists(folder + "\\" + path)) { XPTable.Models.Row itemList = new XPTable.Models.Row { Tag = folder + "\\" + path }; var cell_name = new XPTable.Models.Cell(name); if(bold) cell_name.ForeColor=Color.Blue; else { cell_name.ForeColor = Color.Tomato; } itemList.Cells.Add(cell_name); itemList.Cells.Add(new XPTable.Models.Cell(path)); var cell = new XPTable.Models.Cell(des); cell.ForeColor = Color.Gray; itemList.Cells.Add(cell); table1.TableModel.Rows.Add(itemList); } } } } private void CloseApp() { Itrycn_Db.IsCloseConfirm = false; this.DockPanel.FindForm().Close(); } /// /// 获取Notepad++路径 /// /// private string GetNotepadPlusPath() { var path = ""; try { RegistryKey LMach = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry64); RegistryKey softwareRun = LMach.OpenSubKey(@"SOFTWARE\Notepad++", true); if (softwareRun.GetValue("") != null) { string notepad_plus_path = softwareRun.GetValue("").ToString() + "\\notepad++.exe"; if (System.IO.File.Exists(notepad_plus_path)) { path = notepad_plus_path; } } softwareRun.Close(); LMach.Close(); } catch { } return path; } private void FrmProject_Load(object sender, EventArgs e) { } private void table1_DoubleClick(object sender, EventArgs e) { if (table1.SelectedItems.Length == 0) { return; } var path = table1.SelectedItems[0].Tag.ToString(); if (System.IO.Directory.Exists(path)) { ryCommon.RyFiles.OpenFile(path); } else if (System.IO.File.Exists(path)) { if (System.IO.Path.GetExtension(path).ToLower() == ".txt") { string notepad_plus_path = GetNotepadPlusPath(); if (System.IO.File.Exists(notepad_plus_path)) { ryCommon.RyFiles.RunFile(notepad_plus_path, "\"" + path + "\""); } else { ryCommon.RyFiles.OpenFile(path); } } else if (System.IO.Path.GetExtension(path).ToLower() == ".md") { ryCommon.RyFiles.OpenFile(path); } else { ryCommon.RyFiles.OpenFolderGotoFile(path); } } } private void BtnClean_Click(object sender, EventArgs e) { switch (MessageBox.Show("是否要进行清理不必要的文件,例如*.pdb", "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Information)) { case DialogResult.No: return; } BtnClean.Enabled = false; var folder = GetBFFolderPath(); if(folder!="") { if (System.IO.Directory.Exists(folder + "\\Bin\\Debug")) { Itrycn_Db.DeleteFiles(folder + "\\Bin\\Debug", "*.pdb"); Itrycn_Db.DeleteFiles(folder + "\\Bin\\Debug", "*.dcu"); } if (System.IO.Directory.Exists(folder + "\\Bin\\Release")) { Itrycn_Db.DeleteFiles(folder + "\\Bin\\Release", "*.pdb"); Itrycn_Db.DeleteFiles(folder + "\\Bin\\Release", "*.dcu"); } if (System.IO.Directory.Exists(folder + "\\Source")) { Itrycn_Db.DeleteFiles(folder + "\\Source", "*.pdb"); Itrycn_Db.DeleteFiles(folder + "\\Source", "*.dcu"); } } BtnClean.Enabled = true; MessageBox.Show("清理完成。", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); } /// /// 等待进程执行完毕 /// /// /// public static string Read_Prog(string exe,string cmd_text) { String cmd = exe; Process p = new Process { StartInfo = new System.Diagnostics.ProcessStartInfo { FileName = cmd,//设定程序名 Arguments = cmd_text, UseShellExecute = false, //关闭shell的使用 RedirectStandardInput = true, //重定向标准输入 RedirectStandardOutput = true, //重定向标准输出 RedirectStandardError = false, //重定向错误输出 CreateNoWindow = true//设置不显示窗口 } }; p.Start(); string result = p.StandardOutput.ReadToEnd(); p.WaitForExit(20000); p.Close(); return result; } private void BtnBatchZip_Click(object sender, EventArgs e) { BtnBatchZip.Enabled = false; Thread th = new Thread(Start); th.Start(); void Start() { var com_mode = "Debug"; DataProvider mydb = new DataProvider(); IDbInterface db = Itrycn_Db.CreateDataProvider(Itrycn_Db.dataType); if (db.ConnDb(Itrycn_Db.User_SQLConn) == 1) { var ds = db.ReadData("select * from Settings where name='Setting'"); if (mydb.HaveData(ds)) { var row = mydb.GetData(ds); ryCommon.Storage mStor = new ryCommon.Storage(row["value"].ToString()); mStor.SelectNodeBySet(); var ReactorPath = mStor.GetAttrValue("ReactorPath"); var WinRARPath = mStor.GetAttrValue("WinRARPath"); if (WinRARPath == "") { if (System.IO.File.Exists(@"C:\Program Files\WinRAR\WinRAR.exe")) { WinRARPath = @"C:\Program Files\WinRAR\WinRAR.exe"; } } var bf_folder = GetBFFolderPath(); if (bf_folder != "") { ryCommon.Ini ini = new Ini(bf_folder + "\\查看项目.ryp"); var eng_name = ini.ReadIni("project", "engname"); var proglang = ini.ReadIni("project", "proglang"); var ouput_folder = bf_folder + "\\Bin\\" + com_mode + "\\" + eng_name; var file_ver = ""; if (System.IO.File.Exists(ouput_folder + "\\" + eng_name + ".exe")) { FileVersionInfo fileVerInfo = System.Diagnostics.FileVersionInfo.GetVersionInfo(ouput_folder + "\\" + eng_name + ".exe"); file_ver = fileVerInfo.ProductVersion; } if (proglang == "c#") { ShowState("正在进行混淆..."); if (System.IO.File.Exists(bf_folder + "\\Bin\\混淆_" + com_mode + ".nrproj")) { var cmd = Read_Prog(ReactorPath, "-project \"" + bf_folder + "\\Bin\\混淆_" + com_mode + ".nrproj\""); } } ShowState("正在清理不重要的缓存..."); ryCommon.RyFiles.DeleteFile(ouput_folder + "\\Secure\\*.pdb"); ShowState("复制混淆文件到底包目录..."); ryCommon.RyFiles.CopyFile(ouput_folder + "\\Secure\\*", bf_folder + "\\Publish\\OriginalFiles\\"); #region 复制自定义规则文件到底包目录 ShowState("复制自定义规则文件到底包目录..."); var Publish = ryCommon.RyFiles.ReadAllLines(bf_folder + "\\Publish\\Publish.set"); for (int m = 0; m < Publish.Length; m++) { var line = Publish[m].Trim(); if (line == "" || line.IndexOf("#") == 0) { continue; } if (line.IndexOfEx("del:") == 0) { ryCommon.RyFiles.DeleteFile(bf_folder + "\\Publish\\OriginalFiles\\" + line.Substring(4)); } else if (line.IndexOfEx("copy:") == 0) { var from_to = line.Substring(5).Replace("->", "|").Split('|'); if (from_to.Length == 2) { var from_path = from_to[0]; var to_path = from_to[1]; ryCommon.RyFiles.CopyFile(ouput_folder + "\\" + from_path, bf_folder + "\\Publish\\OriginalFiles\\" + to_path); } } } #endregion ShowState("正在打包..."); var cmd2 = Read_Prog(WinRARPath, "-r -ep1 a \"" + bf_folder + "\\Publish\\Green\\" + eng_name + ".zip\" \"" + bf_folder + "\\Publish\\OriginalFiles\\\""); RyFiles.CopyFile(bf_folder + "\\Publish\\Green\\" + eng_name + ".zip", bf_folder + "\\Publish\\Green\\HistoryVer\\" + eng_name + "_" + file_ver + ".zip"); ShowState("打包完成..."); } } } db.Free(); void ShowState(string text) { this.Invoke(new Action(() => { LblState.Text = "状态:" + text; })); } this.Invoke(new Action(() => { BtnBatchZip.Enabled = true; })); } } private void GetVersBySln(string path) { RyProject project = new RyProject(); string update_logs_text = ""; if (System.IO.File.Exists(path)) { var sln_text = ryCommon.RyFiles.ReadAllLines(path); for (int i = 0; i < sln_text.Length; i++) { if(sln_text[i].StartsWith("Project")) { var item = sln_text[i].Replace(" = ",",").Split(','); if (item.Length>=3) { var project_name = item[1].Trim().Trim('"'); var project_path =System.IO.Path.GetDirectoryName(path).TrimEnd('\\')+"\\"+item[2].Trim().Trim('"'); var ver = project.GetAssemblyVersion(project_path); if (ver != "") { if (update_logs_text != "") { update_logs_text += "\r\n"; } update_logs_text +="#### "+ project_name + " V" + ver+ "\r\n暂无\r\n"; } } } } } if (update_logs_text != "") { var _path = GetBFFolderPath(); if (_path != "") { var update_text = ryCommon.RyFiles.ReadAllText(_path + "\\CHANGELOG.md"); RyFiles.WriteAllText(_path+ "\\CHANGELOG.md", "### " + DateTime.Now.ToString("yyyy-MM-dd") + "更新\r\n------\r\n"+ update_logs_text + update_text, Encoding.UTF8); RyFiles.OpenFile(_path + "\\CHANGELOG.md"); } } } private void BtnInsertUpdate_Click(object sender, EventArgs e) { var _path = GetBFFolderPath(); if (_path != "") { var files = System.IO.Directory.GetFiles(_path+"\\Source"); for (int i = 0; i < files.Length; i++) { var ext = System.IO.Path.GetExtension(files[i]).ToLower(); if(ext==".sln") { GetVersBySln(files[i]); return; } } var dirs = System.IO.Directory.GetDirectories(_path + "\\Source"); for (int i = 0; i < dirs.Length; i++) { var files2 = System.IO.Directory.GetFiles(dirs[i]); for (int m = 0; m < files2.Length; m++) { var ext = System.IO.Path.GetExtension(files2[m]).ToLower(); if (ext == ".sln") { GetVersBySln(files2[m]); return; } } } var sln_path = _path + "\\CHANGELOG.md"; } } private void BtnUpdateDll_Click(object sender, EventArgs e) { BtnUpdateDll.Enabled = false; int error = 0; RyProject project = new RyProject { CopyDllToBin = true, ChangedOutputPath = false }; var bf_folder = GetBFFolderPath(); if(bf_folder!="") { error+= project.UpdateCSproj(bf_folder+"\\Source"); } error +=project.UpdateDlls(bf_folder+"\\Bin",out string _error_str); BtnUpdateDll.Enabled = true; if (error == 0) { MessageBox.Show("更新dll完成。", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); } else { MessageBox.Show("更新dll完成,共失败"+error+ "项。\r\n\r\n" + _error_str, "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning); } } private void FrmPathInfo_Load(object sender, EventArgs e) { } private void BtnCreateFolder_Click(object sender, EventArgs e) { ryCommon.Ini ini= new Ini(TxtFolder.Text+ "\\查看项目.ryp"); FrmCreateProject frm = new FrmCreateProject(); frm.TxtFolder.Text = TxtFolder.Text; frm.ChkUnCreateProject.Checked = true; frm.TxtProjectEngName.Text = ini.ReadIni("project", "engname"); frm.TxtProjectName.Text = ini.ReadIni("project", "name"); frm.StartPosition = FormStartPosition.CenterParent; frm.ShowDialog(); } private void BtnUpdateDllVer_Click(object sender, EventArgs e) { BtnUpdateDllVer.Enabled = false; int error = 0; RyProject project = new RyProject { CopyDllToBin = true, ChangedOutputPath = false }; var bf_folder = GetBFFolderPath(); var _error_str = ""; if (bf_folder != "") { error += project.UpdateDlls(bf_folder + "\\Bin", out _error_str); } BtnUpdateDllVer.Enabled = true; if (error == 0) { MessageBox.Show("更新dll完成。", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); } else { MessageBox.Show("更新dll完成,共失败" + error + "项。\r\n\r\n"+ _error_str, "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning); } } } }