在好例子网,分享、交流、成长!
您当前所在位置:首页C# 开发实例C#图形和图像处理 → VS2017离线安装工具 源码

VS2017离线安装工具 源码

C#图形和图像处理

下载此实例
  • 开发语言:C#
  • 实例大小:0.10M
  • 下载次数:26
  • 浏览次数:631
  • 发布时间:2018-07-12
  • 实例类别:C#图形和图像处理
  • 发 布 人:kaixinse
  • 文件格式:.rar
  • 所需积分:2
 相关标签: 安装 工具 VS2017

实例介绍

【实例简介】

1、程序版本:根据下拉选择需要的版本(社区、专业、企业),如果程序目录没有指定版本的离线工具,会显示下载链接,点击下载即可

2、缓存目录:离线文件存储目录

3、保存设置:可以保存设置好的程序版本和缓存目录用于下次使用

【实例截图】

from clipboard

【核心代码】


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();
            }
        }
    }
}


标签: 安装 工具 VS2017

实例下载地址

VS2017离线安装工具 源码

不能下载?内容有错? 点击这里报错 + 投诉 + 提问

好例子网口号:伸出你的我的手 — 分享

网友评论

发表评论

(您的评论需要经过审核才能显示)

查看所有0条评论>>

小贴士

感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。

  • 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
  • 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
  • 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
  • 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。

关于好例子网

本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明

;
报警