using (Process process = Process.Start(psi)) if (process == null) throw new InvalidOperationException("Failed to start msiexec"); if (!process.WaitForExit(300000)) // 5 minute timeout process.Kill(); throw new TimeoutException("Installation timed out"); return process.ExitCode == 0; catch (Exception ex) _logger.LogError($"Installation error: ex.Message"); return false;
try $process = Start-Process -FilePath "msiexec.exe" ` -ArgumentList $arguments ` -Wait -NoNewWindow -PassThru if ($process.ExitCode -eq 0) Write-Log "SUCCESS" "Installation completed successfully" return $true else Write-Log "ERROR" "Installation failed with exit code: $($process.ExitCode)" return $false
else Write-Log "ERROR" "USBDK installation failed" exit 1 2-download and install usbdk-1.0.22-x64.msi
return $false function Install-USBDK Write-Log "INFO" "Installing USBDK..."
$arguments = @( "/i", "`"$InstallerPath`"" "/quiet" "/norestart" ) using (Process process = Process
try $webClient = New-Object System.Net.WebClient $webClient.DownloadFile($USBDK_URL, $InstallerPath) if (Test-Path $InstallerPath) Write-Log "SUCCESS" "Downloaded to $InstallerPath" return $true
// Step 3: Download the installer _logger.LogInfo($"Downloading USBDK from USBDK_DOWNLOAD_URL"); if (!await DownloadInstallerAsync()) _logger.LogError("Failed to download USBDK installer"); return false; throw new TimeoutException("Installation timed out")
public void LogWarning(string message) Console.ForegroundColor = ConsoleColor.Yellow; Console.WriteLine($"[WARNING] DateTime.Now:HH:mm:ss - message"); Console.ResetColor();
C# Usage:
// Check Windows registry string uninstallKey = @"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall"; using (Microsoft.Win32.RegistryKey key = Microsoft.Win32.Registry.LocalMachine.OpenSubKey(uninstallKey)) if (key != null) foreach (string subkeyName in key.GetSubKeyNames()) using (Microsoft.Win32.RegistryKey subkey = key.OpenSubKey(subkeyName)) if (subkey?.GetValue("DisplayName")?.ToString()?.Contains("UsbDk") == true) return true; return false; catch return false;
public void LogSuccess(string message) Console.ForegroundColor = ConsoleColor.Green; Console.WriteLine($"[SUCCESS] DateTime.Now:HH:mm:ss - message"); Console.ResetColor();