Пример #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();
        }
Пример #2
0
        // Точка запуска удаления программ
        private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
        {
            BackgroundWorker worker = sender as BackgroundWorker;

            try
            {
                string       computer      = selectedTab.Text;
                SoftGridView softGreedView = ((SoftGridView)selectedTab.Controls[computer]);
                int          count         = 0;
                ArrayList    arSoftList    = new ArrayList();
                double       percentOfTask = 0;
                foreach (DataGridViewRow row in softGreedView.Rows)
                {
                    //создаем ArrayList содержащий список программ подлежащий удалению
                    if ((Boolean)row.Cells[0].Value == true)
                    {
                        string[] array = new string[4];
                        array[0] = row.Cells[1].Value.ToString();
                        array[1] = row.Cells[2].Value.ToString();
                        array[2] = row.Cells[3].Value.ToString();
                        arSoftList.Add(array);
                    }
                }
                //для подсчета шкалы прогресса
                int programCount = arSoftList.Count;
                //удаление
                foreach (string[] array in arSoftList)
                {
                    string identifyingNumber = array[0];
                    string programName       = array[1];
                    string programVersion    = array[2];
                    count++;
                    percentOfTask = ((double)count / programCount) * 100;
                    int returnMessage = WMIProcess.deleteProgram(computer, identifyingNumber,
                                                                 programName, programVersion, admin, password);
                    array[3] = returnMessage.ToString();
                    worker.ReportProgress((int)percentOfTask, array);
                }
            }
            catch (InvalidOperationException iex)
            {
                MessageBox.Show(iex.Message);
            }
        }
Пример #3
0
        /// <summary>
        /// запуск процесса установки выбранной программы на указанные компьютеры
        /// </summary>
        private void startInstall()
        {
            //события окончания фоновых процессов
            doneEvents = new ManualResetEvent[selectedComputers.Length];
            int i = 0;

            //для каждого из компьютеров создаем обьект ComputerEntry, поля которого
            //отображают состояние установки на этот компутер и привязаны в качестве источника
            //данных для таблицы прогресса dataGridView. А также для каждого компутера создается
            //обьект InstallProcess который будет выполнять установку пакета на этот компутер и
            //отображать изменяющююся информацию о процессе установки и запускаем метод pingHost
            //этого обьекта в потоке помещенном в ThreadPool
            foreach (string comp in selectedComputers)
            {
                if (comp.Length > 0)
                {
                    ComputerEntry entry = new ComputerEntry(comp);
                    bindingSource.Add(entry);
                    doneEvent     = new ManualResetEvent(false);
                    doneEvents[i] = doneEvent;
                    WMIProcess process = new WMIProcess(entry, doneEvent);
                    process.OneFile          = oneFile;
                    process.OptionRestart    = optionRestart;
                    process.RemoteMachine    = comp;
                    process.UserName         = userNameField.Text;
                    process.Password         = passwordField.Text;
                    process.RandomFolderName = randomFolderName;
                    process.FilePath         = filePathField.Text;
                    process.ExeOptions       = tbExeOptions.Text;
                    //если программа устанавливается из exe файла
                    if (filePathField.Text.ToLower().EndsWith("exe"))
                    {
                        ThreadPool.QueueUserWorkItem(new WaitCallback(process.exeInstallProcess));
                    }
                    //msi
                    else
                    {
                        ThreadPool.QueueUserWorkItem(new WaitCallback(process.installProcess));
                    }
                }
                i++;
            }
        }
Пример #4
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;
        }