Example #1
0
        /// <summary>
        /// нажатие кнопки удаление программы
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnDelete_Click(object sender, EventArgs e)
        {
            //создаем ThreadPool для параллельного запуска установки программы на нескольких
            //ПК одновременно, ограничиваем количество одновременных установок - 5
            ThreadPool.SetMaxThreads(5, 5);
            string[]           selectedComputers = getSelectedComputers();
            ManualResetEvent[] doneEvents        = new ManualResetEvent[selectedComputers.Length];
            int i = 0;

            //создаем источник данных о состоянии удаления, для отображения прогресса в ProgressTable, создаем обьект WMIProcess для каждого компьютера,
            //и помещаем их ThreadPool
            foreach (string comp in selectedComputers)
            {
                ComputerEntry entry = new ComputerEntry(comp);
                bindingSource.Add(entry);
                doneEvent     = new ManualResetEvent(false);
                doneEvents[i] = doneEvent;
                WMIProcess process = new WMIProcess(entry, doneEvent);
                process.ProgramName   = tbSoftName.Text;
                process.OptionRestart = optionRestart;
                process.RemoteMachine = comp;
                process.UserName      = tbAdmin.Text;
                process.Password      = tbPassword.Text;

                ThreadPool.QueueUserWorkItem(new WaitCallback(process.deleteProgram));
                i++;
            }
            //создаем ProgressTable с данными о состоянии задач удаления на выбранных компьютерах
            string        formName         = Properties.Resources.RemovingResults;
            string        firstColumnName  = Properties.Resources.ComputerName;
            string        secondColumnName = Properties.Resources.ProcessStatus;
            ProgressTable progressTable    = new ProgressTable(bindingSource, this, formName, firstColumnName, secondColumnName, doneEvents);

            progressTable.ShowDialog();
        }
        /// <summary>
        /// Нажатие кнопки OK начинающей установку выбранного пакета
        /// на выбранные компьютеры
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnInstall_Click(object sender, EventArgs e)
        {
            //проверка указаны ли целевые компьютеры и пакет msi для установки
            //если нет то выход
            if (compNameField.Text.Length == 0)
            {
                string            message = Properties.Resources.MustSpecifyComputerName;
                string            caption = Properties.Resources.DataEntryError;
                MessageBoxButtons button  = MessageBoxButtons.OK;
                DialogResult      result;
                result = MessageBox.Show(message, caption, button);
                return;
            }

            if (filePathField.Text.Length == 0)
            {
                string            message = Properties.Resources.MustSpecifyDistributive;
                string            caption = Properties.Resources.DataEntryError;
                MessageBoxButtons button  = MessageBoxButtons.OK;
                DialogResult      result;
                result = MessageBox.Show(message, caption, button);
                return;
            }

            //получение случайного имени для временной папки, которая будет создана
            //на каждом из целевых компьютеров для копирования установочных файлов
            randomFolderName = FolderName.GetDirName();
            //установка из одного файла или использовать всю папку?
            oneFile = useOneFile.Checked;
            //от имени другого пользователя или от текукщего?
            anotherUser = checkBox1.Checked;
            //получаем массив с ip-адресами/именами компьютеров выбранных для развертывания
            selectedComputers = getSelectedComputers();
            //создаем ThreadPool для параллельного запуска установки программы на нескольких
            //ПК одновременно, ограничиваем количество одновременных установок - 5
            ThreadPool.SetMaxThreads(5, 5);
            startInstall();

            //открываем окно с таблицей прогресса установки и передаем в него
            //заполненную данными таблицу dataGridView
            ProgressTable progressTable = new ProgressTable(bindingSource, this, doneEvents);

            progressTable.ShowDialog();
        }
Example #3
0
        /// <summary>
        /// Нажатие кнопки сканирования, запускает процессы получения списка установленного ПО на выбранных компьютерах, после завершения сканирования отобразит окно
        /// FormSoftList со списком установленных программ для каждого компьютера на отдельной вкладке
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnScan_Click(object sender, EventArgs e)
        {
            string[] computers = getSelectedComputers();

            //doneEvents нужно для того чтобы программа определила что задача сканирования для каждого из компьютеров завершена
            ManualResetEvent[] doneEvents = new ManualResetEvent[computers.Length];

            int       i          = 0;
            ArrayList dataViewes = new ArrayList();

            ThreadPool.SetMaxThreads(5, 5);
            foreach (string computer in computers)
            {
                SoftGridView softGridView = new SoftGridView();
                softGridView.Name = computer;
                dataViewes.Add(softGridView);
                ComputerEntry entry = new ComputerEntry(computer);
                bindingSource.Add(entry);
                doneEvent     = new ManualResetEvent(false);
                doneEvents[i] = doneEvent;
                WMIProcess process = new WMIProcess(entry, softGridView, doneEvent);
                process.ProgramName   = tbSoftName.Text;
                process.OptionRestart = optionRestart;
                process.RemoteMachine = computer;
                process.UserName      = tbAdmin.Text;
                process.Password      = tbPassword.Text;
                ThreadPool.QueueUserWorkItem(new WaitCallback(process.getSoftList));
                i++;
            }

            string        formName         = Properties.Resources.GettingListOfInstalledPrograms;
            string        firstColumnName  = Properties.Resources.ComputerName;
            string        secondColumnName = Properties.Resources.ProcessStatus;;
            ProgressTable progressTable    = new ProgressTable(bindingSource, this, formName, firstColumnName, secondColumnName, doneEvents);

            progressTable.ShowDialog();

            //создаем форму со списком установленного ПО, передаем в него имя пользователя и пароль, для возможности удаления программ с правами укаазанного пользователя
            //(если он указан) в новом окне
            FormSoftList softList = new FormSoftList(dataViewes, tbAdmin.Text, tbPassword.Text);

            softList.Visible = true;
        }
Example #4
0
        /// <summary>
        /// метод для удаления строк из таблицы
        /// </summary>
        private void deleteRow()
        {
            BindingSource bindingSource = new BindingSource();
            SoftGridView  softGridView  = (SoftGridView)tabControl.SelectedTab.Controls[0];

            //из ArrayList со списком результатов удаления
            foreach (string[] array in resultList)
            {
                int           error = Convert.ToInt32(array[3]);
                string        uninstallException = new Win32Exception(error).Message;
                ComputerEntry entry = new ComputerEntry(array[1], uninstallException);
                bindingSource.Add(entry);
                int rowIndex;
                //если в процессе удаления не произошло ошибки
                if (error == 0)
                {
                    string searchString = array[0];
                    //ищем программу в таблице и удаляем
                    foreach (DataGridViewRow row in softGridView.Rows)
                    {
                        if (row.Cells[1].Value.ToString().Equals(searchString))
                        {
                            rowIndex = row.Index;
                            softGridView.Rows.RemoveAt(rowIndex);
                            break;
                        }
                    }
                }
            }
            //отображаем форму с таблицей результатов удаления
            string        formName         = Properties.Resources.RemovingResults;
            string        firstColumnName  = Properties.Resources.Application;
            string        secondColumnName = Properties.Resources.RemovingResults;
            ProgressTable progressTable    = new ProgressTable(bindingSource, this, formName, firstColumnName, secondColumnName);

            progressTable.ShowDialog();
        }