Initial Commit

This commit is contained in:
Jason SECULA
2025-06-12 10:31:28 +02:00
commit 16af3459e3
48 changed files with 1688 additions and 0 deletions

253
MainWindow.xaml.cs Normal file
View File

@ -0,0 +1,253 @@
using System;
using System.ComponentModel;
using System.Diagnostics;
using System.IO;
using System.Security.Principal;
using System.Threading;
using System.Windows;
using System.Windows.Media;
namespace Test
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
///
public partial class MainWindow : Window
{
static String homeDrive = Path.GetPathRoot(Environment.SystemDirectory);
public String ccmTempPath = $"{homeDrive}temp\\ccmtemp";
public ProgressWindow pwindow;
public BackgroundWorker worker = new BackgroundWorker();
public string[] args = Environment.GetCommandLineArgs();
public String fileName;
public MainWindow()
{
InitializeComponent();
if (args.Length > 1 && args[1] == "-admin")
{
pwindow = new ProgressWindow();
pwindow.Show();
this.Close();
StartWorker_UninstallCCM();
}
}
private void StartWorker_CopyFiles()
{
worker = new BackgroundWorker();
worker.WorkerReportsProgress = true;
pwindow.ProgressLabel.Content = "Copie des fichiers d'installation du centre logiciel...";
worker.ProgressChanged += setProgressBarValue;
worker.RunWorkerCompleted += StartAsAdmin;
worker.DoWork += CopyCCMFiles;
worker.RunWorkerAsync();
}
private void CopyCCMFiles(object sender, System.ComponentModel.DoWorkEventArgs e)
{
string sourcePath = @"\\ac-brt-fsncy1\Logiciels\ccm\client";
String[] Directories = Directory.GetDirectories(sourcePath, "*", SearchOption.AllDirectories);
String[] Files = Directory.GetFiles(sourcePath, "*.*", SearchOption.AllDirectories);
int DirectoryCount = Directories.Length;
int FilesCount = Files.Length;
int progress = 0;
int progressPerFileOrDir = Convert.ToInt32(100.0 / (DirectoryCount+FilesCount));
foreach (string dirPath in Directories)
{
Directory.CreateDirectory(dirPath.Replace(sourcePath, ccmTempPath));
progress += progressPerFileOrDir;
worker.ReportProgress(progress);
}
foreach (string newPath in Files)
{
File.Copy(newPath, newPath.Replace(sourcePath, ccmTempPath), true);
progress += progressPerFileOrDir;
worker.ReportProgress(progress);
}
fileName = Path.GetFileName(args[0]);
File.Copy(args[0], $"{homeDrive}temp\\{fileName}", true);
}
private void StartWorker_UninstallCCM()
{
worker = new BackgroundWorker();
worker.WorkerReportsProgress = true;
pwindow.ProgressLabel.Content = "Désinstallation du centre logiciel...";
worker.ProgressChanged += setProgressBarValue;
worker.RunWorkerCompleted += StartWorker_InstallCCM;
worker.DoWork += UninstallCCM;
worker.RunWorkerAsync();
}
private void UninstallCCM(object sender, System.ComponentModel.DoWorkEventArgs e)
{
Process ccmUninstallProcess = new Process();
ccmUninstallProcess.StartInfo.Verb = "runas";
ccmUninstallProcess.StartInfo.FileName = $"{ccmTempPath}\\ccmsetup.exe";
ccmUninstallProcess.StartInfo.Domain = ".";
ccmUninstallProcess.StartInfo.Arguments = "/uninstall";
ccmUninstallProcess.StartInfo.UseShellExecute = true;
ccmUninstallProcess.Start();
int progress = 0;
while (ccmUninstallProcess.HasExited == false)
{
Thread.Sleep(10000);
progress++;
worker.ReportProgress(progress);
}
worker.ReportProgress(40);
Thread.Sleep(3000);
}
private void StartWorker_InstallCCM(object sender, System.ComponentModel.RunWorkerCompletedEventArgs e)
{
worker = new BackgroundWorker();
worker.WorkerReportsProgress = true;
pwindow.ProgressLabel.Content = "Réinstallation du centre logiciel...";
worker.ProgressChanged += setProgressBarValue;
worker.RunWorkerCompleted += StartWorker_UpdateGPO;
worker.DoWork += InstallCCM;
worker.RunWorkerAsync();
}
private void InstallCCM(object sender, System.ComponentModel.DoWorkEventArgs e)
{
Process ccminstallProcess = new Process();
ccminstallProcess.StartInfo.Verb = "runas";
ccminstallProcess.StartInfo.FileName = $"{ccmTempPath}\\ccmsetup.exe";
ccminstallProcess.StartInfo.Domain = ".";
ccminstallProcess.StartInfo.Arguments = "/mp=ac-brt-ecm.in.ac-nancy-metz.fr smssitecode=ncy smsmp=ac-brt-ecm.in.ac-nancy-metz.fr dnsuffix=int.ac-nancy-metz.fr";
ccminstallProcess.StartInfo.UseShellExecute = true;
ccminstallProcess.Start();
Thread.Sleep(1000);
Process[] ccmProcess = Process.GetProcessesByName("ccmsetup");
int progress = 41;
while (ccmProcess.Length > 0)
{
Thread.Sleep(10000);
progress++;
worker.ReportProgress(progress);
ccmProcess = Process.GetProcessesByName("ccmsetup");
}
worker.ReportProgress(90);
Thread.Sleep(3000);
}
private void StartWorker_UpdateGPO(object sender, System.ComponentModel.RunWorkerCompletedEventArgs e)
{
worker = new BackgroundWorker();
worker.WorkerReportsProgress = true;
pwindow.ProgressLabel.Content = "Mise à jour des stratégies de l'ordinateur...";
worker.ProgressChanged += setProgressBarValue;
worker.DoWork += UpdateGPO;
worker.RunWorkerCompleted += closeApp;
worker.RunWorkerAsync();
}
private void UpdateGPO(object sender, System.ComponentModel.DoWorkEventArgs e)
{
Process updateGPOProcess = new Process();
updateGPOProcess.StartInfo.Verb = "runas";
updateGPOProcess.StartInfo.FileName = $"{Environment.SystemDirectory}\\gpupdate.exe";
updateGPOProcess.StartInfo.Domain = ".";
updateGPOProcess.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
updateGPOProcess.StartInfo.Arguments = "/force";
updateGPOProcess.StartInfo.UseShellExecute = true;
updateGPOProcess.Start();
Process[] gpupdateProcess = Process.GetProcessesByName("gpupdate");
while (gpupdateProcess.Length > 0)
{
Thread.Sleep(1000);
gpupdateProcess = Process.GetProcessesByName("gpupdate");
}
worker.ReportProgress(100);
Thread.Sleep(3000);
}
private void closeApp(object sender, System.ComponentModel.RunWorkerCompletedEventArgs e)
{
pwindow.Close();
}
private void setProgressBarValue(object sender, System.ComponentModel.ProgressChangedEventArgs e)
{
pwindow.setProgressBarValue(e.ProgressPercentage);
}
private void WrongPassword()
{
errorLabel.Visibility = Visibility.Visible;
passwordBox.BorderBrush = Brushes.Red;
errorLabel.Content = "Mauvais code";
}
private void StartAsAdmin(object sender, System.ComponentModel.RunWorkerCompletedEventArgs e)
{
try
{
worker = new BackgroundWorker();
worker.WorkerReportsProgress = true;
Process restartAsAdmin = new Process();
restartAsAdmin.StartInfo.FileName = $"{homeDrive}temp\\{fileName}";
restartAsAdmin.StartInfo.UserName = "administrateur";
restartAsAdmin.StartInfo.Password = passwordBox.SecurePassword;
restartAsAdmin.StartInfo.Domain = ".";
restartAsAdmin.StartInfo.Arguments = "-admin";
restartAsAdmin.StartInfo.UseShellExecute = false;
restartAsAdmin.Start();
}
catch(Exception)
{
}
pwindow.Close();
}
private void ValidPassword()
{
pwindow = new ProgressWindow();
pwindow.Show();
this.Close();
StartWorker_CopyFiles();
}
private void Button_Click(object sender, RoutedEventArgs e)
{
errorLabel.Visibility = Visibility.Hidden;
if (checkPassword())
{
ValidPassword();
}
else
{
WrongPassword();
}
}
public bool checkPassword()
{
try
{
Process testProcess = new Process();
testProcess.StartInfo.FileName = "conhost.exe";
testProcess.StartInfo.WorkingDirectory = Environment.SystemDirectory;
testProcess.StartInfo.UserName = "administrateur";
testProcess.StartInfo.Password = passwordBox.SecurePassword;
testProcess.StartInfo.Domain = ".";
testProcess.StartInfo.UseShellExecute = false;
testProcess.StartInfo.Arguments = "--headless";
testProcess.Start();
return true;
}
catch
{
return false;
}
}
}
}