472 lines
20 KiB
C#
472 lines
20 KiB
C#
|
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();
|
|||
|
}
|
|||
|
/// <summary>
|
|||
|
/// 获取毕方标准项目根路径
|
|||
|
/// </summary>
|
|||
|
/// <returns></returns>
|
|||
|
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();
|
|||
|
}
|
|||
|
/// <summary>
|
|||
|
/// 获取Notepad++路径
|
|||
|
/// </summary>
|
|||
|
/// <returns></returns>
|
|||
|
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);
|
|||
|
}
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// 等待进程执行完毕
|
|||
|
/// </summary>
|
|||
|
/// <param name="cmd_text"></param>
|
|||
|
/// <returns></returns>
|
|||
|
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);
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
}
|