Ejemplo n.º 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();
        }
Ejemplo n.º 2
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++;
            }
        }
Ejemplo n.º 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;
        }
Ejemplo n.º 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();
        }
Ejemplo n.º 5
0
 public WMIProcess(ComputerEntry computerEntry, SoftGridView softGridView, ManualResetEvent doneEvent)
 {
     entry             = computerEntry;
     this.softGridView = softGridView;
     this.doneEvent    = doneEvent;
 }
Ejemplo n.º 6
0
 public WMIProcess(ComputerEntry computerEntry, ManualResetEvent doneEvent)
 {
     entry          = computerEntry;
     this.doneEvent = doneEvent;
 }