基本信息
源码名称:VS2017离线安装工具 源码
源码大小:0.10M
文件格式:.rar
开发语言:C#
更新时间:2018-07-12
友情提示:(无需注册或充值,赞助后即可获取资源下载链接)
嘿,亲!知识可是无价之宝呢,但咱这精心整理的资料也耗费了不少心血呀。小小地破费一下,绝对物超所值哦!如有下载和支付问题,请联系我们QQ(微信同号):813200300
本次赞助数额为: 2 元×
微信扫码支付:2 元
×
请留下您的邮箱,我们将在2小时内将文件发到您的邮箱
源码介绍
1、程序版本:根据下拉选择需要的版本(社区、专业、企业),如果程序目录没有指定版本的离线工具,会显示下载链接,点击下载即可
2、缓存目录:离线文件存储目录3、保存设置:可以保存设置好的程序版本和缓存目录用于下次使用
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Diagnostics; using System.Drawing; using System.IO; using System.Linq; using System.Net; using System.Text; using System.Threading; using System.Windows.Forms; namespace vs2017离线安装操作 { // 1.定义委托 public delegate void DelReadStdOutput(string result); public delegate void DelReadErrOutput(string result); public partial class MainForm : Form { // 2.定义委托事件 public event DelReadStdOutput ReadStdOutput; public event DelReadErrOutput ReadErrOutput; string baseFromPath = "https://aka.ms/vs/15/release/"; string baseDownPath = System.Environment.CurrentDirectory; Process cmd = null; string isRun = "start"; string shell = "ping www.baidu.com"; public MainForm() { InitializeComponent(); Init(); } private void Init() { //3.将相应函数注册到委托事件中 ReadStdOutput = new DelReadStdOutput(ReadStdOutputAction); ReadErrOutput = new DelReadErrOutput(ReadErrOutputAction); } private void btnSelectDir_Click(object sender, EventArgs e) { FolderBrowserDialog fbd = new FolderBrowserDialog(); fbd.ShowNewFolderButton = true; DialogResult result = fbd.ShowDialog(); if(result==DialogResult.OK) { txtSaveDirectory.Text = fbd.SelectedPath; } } /// <summary> /// 根据下拉选项判断文件名称 /// </summary> /// <returns></returns> string getFileNameByTypeCombox() { string fromPath = ""; string typestr = comboBox1.SelectedItem.ToString(); if (typestr == "Visual Studio Community 2017(社区版)") { fromPath = "vs_community社区.exe"; } else if (typestr == "Visual Studio Professional 2017(专业版)") { fromPath = "vs_professional专业.exe"; } else if (typestr == "Visual Studio Enterprise 2017(企业版)") { fromPath = "vs_enterprise企业.exe"; } return fromPath; } private void linkLabel1_Click(object sender, EventArgs e) { string fromPath = baseFromPath getFileNameByTypeCombox(); string savePath = baseDownPath "\\" getFileNameByTypeCombox(); DownFile df = new DownFile(fromPath, savePath); df.StartPosition = FormStartPosition.CenterParent; DialogResult result= df.ShowDialog(); if(result==DialogResult.OK) { comboBox1_SelectedIndexChanged(null, null); MessageBoxEx.Show("下载成功!"); } } private void comboBox1_SelectedIndexChanged(object sender, EventArgs e) { DirectoryInfo di = new DirectoryInfo(System.Environment.CurrentDirectory); FileInfo[] files = di.GetFiles(getFileNameByTypeCombox()); if(files.Length>0) { linkLabel1.Visible = false; } else { linkLabel1.Visible = true; } } public delegate string MyDelegate(); private void RealAction(string StartCmd) { Process CmdProcess = new Process(); CmdProcess.StartInfo.FileName = "cmd.exe"; // 命令 //CmdProcess.StartInfo.Arguments = StartFileArg; // 参数 CmdProcess.StartInfo.WorkingDirectory = "."; CmdProcess.StartInfo.CreateNoWindow = true; // 不创建新窗口 CmdProcess.StartInfo.UseShellExecute = false; // 是否使用shell CmdProcess.StartInfo.RedirectStandardInput = true; // 重定向输入 CmdProcess.StartInfo.RedirectStandardOutput = true; // 重定向标准输出 CmdProcess.StartInfo.RedirectStandardError = true; // 重定向错误输出 //CmdProcess.StartInfo.WindowStyle = ProcessWindowStyle.Hidden; CmdProcess.OutputDataReceived = new DataReceivedEventHandler(p_OutputDataReceived); CmdProcess.ErrorDataReceived = new DataReceivedEventHandler(p_ErrorDataReceived); CmdProcess.EnableRaisingEvents = true; // 启用Exited事件 CmdProcess.Exited = new EventHandler(CmdProcess_Exited); // 注册进程结束事件 CmdProcess.Start(); //输入命令 CmdProcess.StandardInput.WriteLine(StartCmd); CmdProcess.BeginOutputReadLine(); CmdProcess.BeginErrorReadLine(); // 如果打开注释,则以同步方式执行命令,此例子中用Exited事件异步执行。 // CmdProcess.WaitForExit(); } private void p_OutputDataReceived(object sender, DataReceivedEventArgs e) { if (e.Data != null) { // 4. 异步调用,需要invoke this.Invoke(ReadStdOutput, new object[] { e.Data }); } } private void p_ErrorDataReceived(object sender, DataReceivedEventArgs e) { if (e.Data != null) { this.Invoke(ReadErrOutput, new object[] { e.Data }); } } /// <summary> /// 输出命令信息 /// </summary> /// <param name="result"></param> private void ReadStdOutputAction(string result) { this.txtcmdLogTextArea.AppendText(result "\r\n"); } /// <summary> /// 输出错误信息 /// </summary> /// <param name="result"></param> private void ReadErrOutputAction(string result) { //this.textBoxShowErrRet.AppendText(result "\r\n"); } private void CmdProcess_Exited(object sender, EventArgs e) { // 执行结束后触发 } /// <summary> /// 保存设置 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void btnSave_Click(object sender, EventArgs e) { string configFileName = Application.ExecutablePath ".config"; System.Xml.XmlDocument doc = new System.Xml.XmlDocument(); doc.Load(configFileName); string configString = @"configuration/applicationSettings/vs2017离线安装操作.Properties.Settings/setting[@name='程序版本']/value"; System.Xml.XmlNode configNode = doc.SelectSingleNode(configString); if (configNode != null) { configNode.InnerText = comboBox1.SelectedItem.ToString(); doc.Save(configFileName); } configString = @"configuration/applicationSettings/vs2017离线安装操作.Properties.Settings/setting[@name='缓存目录']/value"; configNode = doc.SelectSingleNode(configString); if (configNode != null) { configNode.InnerText = txtSaveDirectory.Text.Trim(); doc.Save(configFileName); // 刷新应用程序设置,这样下次读取时才能读到最新的值。 Properties.Settings.Default.Reload(); } // 刷新应用程序设置,这样下次读取时才能读到最新的值。 Properties.Settings.Default.Reload(); //if (comboBox1.SelectedIndex > -1) //{ // Properties.Settings.Default.["程序版本"] = comboBox1.SelectedItem.ToString(); //} //else //{ // Properties.Settings.Default["程序版本"] = ""; //} //Properties.Settings.Default["缓存目录"] = txtSaveDirectory.Text.Trim(); //Properties.Settings.Default.Save(); MessageBoxEx.Show(this, "保存成功", "提示"); } private void btnDown_Click(object sender, EventArgs e) { if (comboBox1.SelectedIndex == -1) { MessageBoxEx.Show(this, "请选择程序版本", "提示"); return; } else { if (linkLabel1.Visible) { MessageBoxEx.Show(this, "请先下载相关程序", "提示"); return; } } if (txtSaveDirectory.Text.ToString() == "") { MessageBoxEx.Show(this, "请选择缓存目录", "提示"); return; } else { if (!Directory.Exists(txtSaveDirectory.Text.Trim())) { MessageBoxEx.Show(this, "缓存目录不存在,请检查后重试", "提示"); return; } } string cmdstr = getFileNameByTypeCombox() " --layout " txtSaveDirectory.Text.Trim() " --lang Zh-cn"; RealAction(cmdstr); } private void btnClean_Click(object sender, EventArgs e) { if (comboBox1.SelectedIndex == -1) { MessageBoxEx.Show(this, "请选择程序版本", "提示"); return; } else { if (linkLabel1.Visible) { MessageBoxEx.Show(this, "请先下载相关程序", "提示"); return; } } if (txtSaveDirectory.Text.ToString() == "") { MessageBoxEx.Show(this, "请选择缓存目录", "提示"); return; } else { if (!Directory.Exists(txtSaveDirectory.Text.Trim())) { MessageBoxEx.Show(this, "缓存目录不存在,请检查后重试", "提示"); return; } } //判断根目录 DirectoryInfo di = new DirectoryInfo(txtSaveDirectory.Text.ToString()); DirectoryInfo[] dilist = di.GetDirectories("Archive"); if(dilist.Length==0) { MessageBoxEx.Show(this, "当前缓存目录下文件无需清理", "提示"); return; } //判断指定目录 di = dilist[0]; dilist = di.GetDirectories(); if (dilist.Length == 0) { MessageBoxEx.Show(this, "当前缓存目录下文件无需清理", "提示"); return; } //获取最新目录的名称 string cleanpath = txtSaveDirectory.Text.Trim() "\\Archive\\" dilist[0].Name "\\Catalog.json"; dilist.OrderByDescending(a => a.CreationTime); string cmdstr = getFileNameByTypeCombox() " --layout " txtSaveDirectory.Text.Trim() " --clean " cleanpath; RealAction(cmdstr); } private void MainForm_Shown(object sender, EventArgs e) { if(Properties.Settings.Default["程序版本"].ToString()!="") { comboBox1.SelectedItem = Properties.Settings.Default["程序版本"].ToString(); } if(Properties.Settings.Default["缓存目录"].ToString() != "") { txtSaveDirectory.Text = Properties.Settings.Default["缓存目录"].ToString(); } } } }