using SuperMap.RealEstate.Launcher; using SuperMap.RealEstate.Launcher_WinForm; using System; using System.Diagnostics; using System.IO; using System.Windows.Forms; namespace Launcher.Install { public partial class frmMain : Form { string _TempPath, _TempGuidPath, _InstallPath; string _TempFile= "Config.ini"; public frmMain(string iniFilePath) { _TempPath = Path.GetFullPath(AppDomain.CurrentDomain.BaseDirectory + "..\\Temp\\"); _TempGuidPath = _TempPath + Guid.NewGuid().ToString() + "\\"; _InstallPath = Path.GetFullPath(AppDomain.CurrentDomain.BaseDirectory + "..\\Install\\"); LoadingHelper.Init(_TempPath); if (!Directory.Exists(_TempGuidPath)) Directory.CreateDirectory(_TempGuidPath); _TempFile = _TempGuidPath + LaunchHelper.Installer_IniFileName; if (!string.IsNullOrEmpty(iniFilePath)) File.Move(iniFilePath, _TempFile); InitializeComponent(); this.Text += Application.ProductVersion; this.Width = 700; _BackgroundDownload = new BackgroundDownload(); //_BackgroundDownload. //_BackgroundDownload.ShowTimeOut = 1; //_BackgroundDownload. //_BackgroundDownload.ProgressBarVisible1 = true; Compress7z.SeventZPrcessPath = "..\\Bin"; } private void frmMain_Load(object sender, EventArgs e) { DataGridView_Initialize(); DataGridView_LoadData(); //LoadingHelper.SetProgress1Value(50); LoadingHelper.Close(1); } #region DataGridView_Initialize private void DataGridView_Initialize() { int index = 0; dataGridView1.Columns[index++].HeaderText = "选择";//0 dataGridView1.Columns[index++].HeaderText = "分组";//1 dataGridView1.Columns[index++].HeaderText = "名字";//2 dataGridView1.Columns[index++].HeaderText = "描述";//3 dataGridView1.Columns[index++].HeaderText = "目录";//4 dataGridView1.Columns[index++].HeaderText = "执行文件";//5 dataGridView1.Columns[index++].HeaderText = "版本";//6 dataGridView1.Columns[index++].HeaderText = "部署位置";//7 dataGridView1.Columns[index++].HeaderText = "平台";//8 dataGridView1.Columns[index++].HeaderText = "参数";//9 dataGridView1.Columns[index++].HeaderText = "进度";//10 for (int i = 0; i < dataGridView1.Columns.Count; i++) { dataGridView1.Columns[i].Visible = false; dataGridView1.Columns[i].ReadOnly = true; } dataGridView1.Columns[0].ReadOnly = false; dataGridView1.Columns[0].Visible = true; dataGridView1.Columns[3].Visible = true; dataGridView1.Columns[6].Visible = true; dataGridView1.Columns[8].Visible = true; dataGridView1.Columns[8].DisplayIndex = 6; dataGridView1.Columns[10].Visible = true; dataGridView1.Columns[10].DisplayIndex = 1; } #endregion #region DataGridView_LoadData private void DataGridView_LoadData() { using (StreamReader _StreamReader = new StreamReader(_TempFile)) { string[] _RowValues; string _LineText; while (!_StreamReader.EndOfStream) { _RowValues = new string[dataGridView1.Columns.Count]; _RowValues[0] = "true"; for (int i = 1; i < dataGridView1.Columns.Count - 1; i++) { _LineText = _StreamReader.ReadLine(); _RowValues[i] = _LineText.Substring(_LineText.IndexOf(":") + 1); } dataGridView1.Rows.Add(_RowValues); _StreamReader.ReadLine(); } _StreamReader.Close(); } DadaGridView_AutoResizeColumn(3); foreach (DataGridViewRow _Row in dataGridView1.Rows) { if (!System.Environment.Is64BitOperatingSystem) { if (_Row.Cells[8].Value.ToString().Equals("x64", StringComparison.CurrentCultureIgnoreCase)) { _Row.Visible = false; _Row.Cells[0].Value = "false"; } } _Row.Cells[10].Value = "等待下载"; if (File.Exists(_InstallPath + _Row.Cells[5].Value.ToString()) && File.Exists(_InstallPath + _Row.Cells[4].Value.ToString() + "\\Version.txt")) { StreamReader _StreamReader = File.OpenText(_InstallPath + _Row.Cells[4].Value.ToString() + "\\Version.txt"); if (_StreamReader.ReadToEnd() == _Row.Cells[6].Value.ToString()) _Row.Cells[10].Value = "等待安装"; _StreamReader.Close(); } } } #endregion #region DadaGridView_AutoResizeColumn private void DadaGridView_AutoResizeColumn(int FillIndex) { for (int j = 0; j < 5; j++) { for (int i = 0; i < dataGridView1.Columns.Count; i++) { if (i != FillIndex) { dataGridView1.AutoResizeColumn(i); } } } } #endregion BackgroundDownload _BackgroundDownload; private void buttonInstall_Click(object sender, EventArgs e) { int _DownLoadCount = DataGridView_InitDownLoad(); if (_DownLoadCount > 0) { _BackgroundDownload.Progress2Value = 0; _BackgroundDownload.SetProgress2Maximum(_DownLoadCount); _BackgroundDownload.Progress1Value = 0; } string _7zFileName, _7zUnZipPath; //下载 foreach (DataGridViewRow _Row in dataGridView1.Rows) { if (_Row.Visible == false) continue; _7zFileName = _Row.Cells[7].Value.ToString(); _7zFileName = _7zFileName.Substring(_7zFileName.LastIndexOf("/") + 1).Replace(".7z.Deploy", ".7z"); _7zFileName = _TempGuidPath + _Row.Cells[4].Value.ToString() + "\\" + _7zFileName; _7zUnZipPath = _InstallPath + _Row.Cells[4].Value.ToString() + "\\"; if (_Row.Cells[10].Value.ToString() == "等待下载") { //_BackgroundDownload.Progress1Value = 0; _BackgroundDownload.ProgressBarText = "下载 " + _Row.Cells[3].Value.ToString(); _BackgroundDownload.DownloadFileAsync(_Row.Cells[7].Value.ToString(), _7zFileName); _BackgroundDownload.WaitingForDownloadFileAsyncCompleted(); _BackgroundDownload.Progress1Value = 100; _Row.Cells[10].Value = "下载完成"; _BackgroundDownload.Progress2Value++; } } //解压缩 foreach (DataGridViewRow _Row in dataGridView1.Rows) { if (_Row.Visible == false) continue; _7zFileName = _Row.Cells[7].Value.ToString(); _7zFileName = _7zFileName.Substring(_7zFileName.LastIndexOf("/") + 1).Replace(".7z.Deploy", ".7z"); _7zFileName = _TempGuidPath + _Row.Cells[4].Value.ToString() + "\\" + _7zFileName; _7zUnZipPath = _InstallPath + _Row.Cells[4].Value.ToString() + "\\"; if (_Row.Cells[10].Value.ToString() == "下载完成") { if (File.Exists(_7zFileName)) { _BackgroundDownload.ProgressBarText = "解压 " + _Row.Cells[3].Value.ToString(); if (Compress7z.UnZip(_7zFileName, _7zUnZipPath)) { File.Delete(_7zFileName); using (StreamWriter _StreamWriter = File.CreateText(_7zUnZipPath + "Version.txt")) { _StreamWriter.Write(_Row.Cells[6].Value.ToString()); _StreamWriter.Close(); } _Row.Cells[10].Value = "等待安装"; } else { File.Delete(_7zFileName); _Row.Cells[10].Value = "解压失败"; _BackgroundDownload.ProgressBarText = "解压 失败!"; } //MessageBox.Show("A"); } else { _Row.Cells[10].Value = "等待下载"; } } //_BackgroundDownload.Progress2Value++; } //安装 if (checkBoxStartSetup.Checked) { foreach (DataGridViewRow _Row in dataGridView1.Rows) { if (_Row.Visible == false) continue; if (_Row.Cells[10].Value.ToString() != "等待安装") continue; _BackgroundDownload.ProgressBarText = "安装 " + _Row.Cells[3].Value.ToString(); if (SetupPrcess(_InstallPath + _Row.Cells[5].Value.ToString(), checkBoxParameters.Checked ? "" : _Row.Cells[9].Value.ToString())) { //_BackgroundDownload.ProgressBarText = "成功!"; _Row.Cells[10].Value = "安装成功"; } else _BackgroundDownload.ProgressBarText = "安装 失败!"; //MessageBox.Show("A"); } } _BackgroundDownload.ProgressBarHide(); } private int DataGridView_InitDownLoad() { int _DownLoadCount = 0; foreach (DataGridViewRow _Row in dataGridView1.Rows) { if (!bool.Parse(_Row.Cells[0].Value.ToString())) _Row.Visible = false; else { if (_Row.Cells[10].Value == null) _Row.Cells[10].Value = "等待下载"; if (_Row.Cells[10].Value.ToString().EndsWith("失败")) _Row.Cells[10].Value = "等待下载"; if (_Row.Cells[10].Value.ToString() == "等待下载") _DownLoadCount++; } } return _DownLoadCount; } private bool SetupPrcess(string fileName, string arguments) { Process _SetupPrcess = new System.Diagnostics.Process(); _SetupPrcess.StartInfo.WindowStyle = ProcessWindowStyle.Normal; _SetupPrcess.StartInfo.FileName = fileName; _SetupPrcess.StartInfo.WorkingDirectory = Path.GetDirectoryName(fileName); _SetupPrcess.StartInfo.CreateNoWindow = false; _SetupPrcess.StartInfo.Arguments = arguments; _SetupPrcess.Start(); _SetupPrcess.WaitForExit(); if (_SetupPrcess.HasExited) { int iExitCode = _SetupPrcess.ExitCode; _SetupPrcess.Close(); if (iExitCode != 0 && iExitCode != 1) { return false; } return true; } MessageBox.Show(_SetupPrcess.ExitCode.ToString()); _SetupPrcess.Close(); return true; } private void buttonClose_Click(object sender, EventArgs e) { this.Close(); } private void frmMain_FormClosing(object sender, FormClosingEventArgs e) { _BackgroundDownload.Close(); try { if (Directory.Exists(_TempGuidPath)) Directory.Delete(_TempGuidPath, true); } catch { } } //private void dataGridView1_DoubleClick(object sender, EventArgs e) //{ // if (dataGridView1.SelectedRows.Count == 0) // { // MessageBox.Show("请在安装列表中选择要安装的项!", "驿商科技", MessageBoxButtons.OK, // MessageBoxIcon.Warning, MessageBoxDefaultButton.Button1); // return; // } // NewMethod(dataGridView1.SelectedRows[0]); //} private void buttonSetup_Click(object sender, EventArgs e) { if (dataGridView1.SelectedRows.Count == 0) { MessageBox.Show("请在安装列表中选择要安装的项!", "驿商科技", MessageBoxButtons.OK, MessageBoxIcon.Warning, MessageBoxDefaultButton.Button1); return; } NewMethod(dataGridView1.SelectedRows[0]); } private void NewMethod(DataGridViewRow _Row) { if (_Row.Cells[10].Value.ToString() != "等待安装") { MessageBox.Show("请在安装列表中选择“等待安装”的项!", "驿商科技", MessageBoxButtons.OK, MessageBoxIcon.Warning, MessageBoxDefaultButton.Button1); return; } if (SetupPrcess(_InstallPath + _Row.Cells[5].Value.ToString(), "")) { _Row.Cells[10].Value = "安装成功"; } _Row.Selected = false; } private void checkBoxStartSetup_Click(object sender, EventArgs e) { checkBoxStartSetup.Visible = false; buttonSetup.Visible = true; checkBoxParameters.Visible = false; buttonInstall.Text = "下 载(&D)"; dataGridView1.ClearSelection(); } private void dataGridView1_CellDoubleClick(object sender, DataGridViewCellEventArgs e) { if (e.RowIndex < 0) return; NewMethod(dataGridView1.Rows[e.RowIndex]); } } }