From bc6132dc34d5d599438ca8571c3f065cd6d8f738 Mon Sep 17 00:00:00 2001 From: CodingWonders <101426328+CodingWonders@users.noreply.github.com> Date: Fri, 17 Jul 2026 15:54:26 +0200 Subject: [PATCH 01/48] Update assembly information --- My Project/AssemblyInfo.vb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/My Project/AssemblyInfo.vb b/My Project/AssemblyInfo.vb index 19f4ed64..d98bc9f4 100644 --- a/My Project/AssemblyInfo.vb +++ b/My Project/AssemblyInfo.vb @@ -31,5 +31,5 @@ Imports System.Runtime.InteropServices ' mediante el asterisco ('*'), como se muestra a continuación: ' - - + + From 4c7be27478a77870024c54e7b59147f640379f47 Mon Sep 17 00:00:00 2001 From: CodingWonders <101426328+CodingWonders@users.noreply.github.com> Date: Mon, 20 Jul 2026 08:33:06 +0200 Subject: [PATCH 02/48] [PE Helper] Add BDE-GUI encrypt and decrypt commands --- DISMTools.vbproj | 2 +- Helpers/extps1/PE_Helper/files/startup/startnet.cmd | 2 ++ Helpers/extps1/PE_Helper/tools/BDE-GUI | 1 - 3 files changed, 3 insertions(+), 2 deletions(-) delete mode 160000 Helpers/extps1/PE_Helper/tools/BDE-GUI diff --git a/DISMTools.vbproj b/DISMTools.vbproj index 6b7f4584..651efc95 100644 --- a/DISMTools.vbproj +++ b/DISMTools.vbproj @@ -2350,7 +2350,7 @@ IF EXIST "$(SolutionDir)Helpers\extps1\PE_Helper\tools\PEHelperMainMenu\out\*.ex :: Copy BDE-GUI utilities IF EXIST "$(SolutionDir)Helpers\extps1\PE_Helper\tools\BDE-GUI" ( MD "bin\extps1\PE_Helper\tools\BDE-GUI" - FOR %25%25A IN (ps1 bat cmd) DO xcopy "$(SolutionDir)Helpers\extps1\PE_Helper\tools\BDE-GUI\*.%25%25A" "bin\extps1\PE_Helper\tools\BDE-GUI" /CEHYI + FOR %25%25A IN (ps1 bat cmd png) DO xcopy "$(SolutionDir)Helpers\extps1\PE_Helper\tools\BDE-GUI\*.%25%25A" "bin\extps1\PE_Helper\tools\BDE-GUI" /CEHYI ) :: Copy Tour diff --git a/Helpers/extps1/PE_Helper/files/startup/startnet.cmd b/Helpers/extps1/PE_Helper/files/startup/startnet.cmd index 08e43dec..875001c5 100644 --- a/Helpers/extps1/PE_Helper/files/startup/startnet.cmd +++ b/Helpers/extps1/PE_Helper/files/startup/startnet.cmd @@ -169,5 +169,7 @@ if %debug% lss 2 ( doskey bdemgr=cmd /c "%sysdrive%\Tools\BDE-GUI\bdemgr.bat" $* doskey bdelock=cmd /c "%sysdrive%\Tools\BDE-GUI\bdemgr.bat" lock doskey bdeunlock=cmd /c "%sysdrive%\Tools\BDE-GUI\bdemgr.bat" unlock + doskey bdeencrypt=cmd /c "%sysdrive%\Tools\BDE-GUI\bdemgr.bat" encrypt + doskey bdedecrypt=cmd /c "%sysdrive%\Tools\BDE-GUI\bdemgr.bat" decrypt exit /b ) \ No newline at end of file diff --git a/Helpers/extps1/PE_Helper/tools/BDE-GUI b/Helpers/extps1/PE_Helper/tools/BDE-GUI deleted file mode 160000 index 2fb303db..00000000 --- a/Helpers/extps1/PE_Helper/tools/BDE-GUI +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 2fb303db132ad7e3bc18ea78b3e519d69720efbe From 6d8facb8728c331e0e721b629fe1f528117ab142 Mon Sep 17 00:00:00 2001 From: CodingWonders <101426328+CodingWonders@users.noreply.github.com> Date: Mon, 20 Jul 2026 08:34:32 +0200 Subject: [PATCH 03/48] [PE Helper] Add BDE-GUI encrypt and decrypt commands --- Helpers/extps1/PE_Helper/tools/BDE-GUI | 1 + 1 file changed, 1 insertion(+) create mode 160000 Helpers/extps1/PE_Helper/tools/BDE-GUI diff --git a/Helpers/extps1/PE_Helper/tools/BDE-GUI b/Helpers/extps1/PE_Helper/tools/BDE-GUI new file mode 160000 index 00000000..550c9d59 --- /dev/null +++ b/Helpers/extps1/PE_Helper/tools/BDE-GUI @@ -0,0 +1 @@ +Subproject commit 550c9d59ea7d8366bceba8d3fac7bd063b395a69 From cfa83de1aa96d630484dd0b423d9343703ba6311 Mon Sep 17 00:00:00 2001 From: CodingWonders <101426328+CodingWonders@users.noreply.github.com> Date: Tue, 21 Jul 2026 20:15:24 +0200 Subject: [PATCH 04/48] [Enhance] Select source index by clicking list view --- Panels/Img_Ops/ImgExport.Designer.vb | 1 + Panels/Img_Ops/ImgExport.resx | 3 +++ Panels/Img_Ops/ImgExport.vb | 11 +++++++++++ 3 files changed, 15 insertions(+) diff --git a/Panels/Img_Ops/ImgExport.Designer.vb b/Panels/Img_Ops/ImgExport.Designer.vb index f3e8073b..9c8779d7 100644 --- a/Panels/Img_Ops/ImgExport.Designer.vb +++ b/Panels/Img_Ops/ImgExport.Designer.vb @@ -467,6 +467,7 @@ Partial Class ImgExport Me.ListView1.Anchor = CType(((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Left) _ Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) Me.ListView1.Columns.AddRange(New System.Windows.Forms.ColumnHeader() {Me.ColumnHeader1, Me.ColumnHeader2, Me.ColumnHeader3, Me.ColumnHeader4}) + Me.ListView1.FullRowSelect = True Me.ListView1.Location = New System.Drawing.Point(16, 58) Me.ListView1.Name = "ListView1" Me.ListView1.Size = New System.Drawing.Size(450, 262) diff --git a/Panels/Img_Ops/ImgExport.resx b/Panels/Img_Ops/ImgExport.resx index 3323cd5f..6b328102 100644 --- a/Panels/Img_Ops/ImgExport.resx +++ b/Panels/Img_Ops/ImgExport.resx @@ -120,6 +120,9 @@ 17, 17 + + 17, 17 + 134, 17 diff --git a/Panels/Img_Ops/ImgExport.vb b/Panels/Img_Ops/ImgExport.vb index b84d1979..96bee0d6 100644 --- a/Panels/Img_Ops/ImgExport.vb +++ b/Panels/Img_Ops/ImgExport.vb @@ -662,4 +662,15 @@ Public Class ImgExport End Select If ListBox1.Items.Count <= 0 Then Beep() End Sub + + Private Sub ListView1_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ListView1.SelectedIndexChanged + Try + If ListView1.SelectedItems.Count = 1 Then + NumericUpDown1.Value = ListView1.FocusedItem.Index + 1 + End If + Catch ex As Exception + NumericUpDown1.Value = 1 + NumericUpDown1.Maximum = 1 + End Try + End Sub End Class From 43c3257b02426e8cf729bafa4303af37d00b09a0 Mon Sep 17 00:00:00 2001 From: CodingWonders <101426328+CodingWonders@users.noreply.github.com> Date: Tue, 21 Jul 2026 21:49:30 +0200 Subject: [PATCH 05/48] [PE Helper/BDE-GUI] Update submodule --- Helpers/extps1/PE_Helper/files/startup/startnet.cmd | 3 +++ Helpers/extps1/PE_Helper/tools/BDE-GUI | 1 - MainForm.vb | 2 +- 3 files changed, 4 insertions(+), 2 deletions(-) delete mode 160000 Helpers/extps1/PE_Helper/tools/BDE-GUI diff --git a/Helpers/extps1/PE_Helper/files/startup/startnet.cmd b/Helpers/extps1/PE_Helper/files/startup/startnet.cmd index 875001c5..86e65b12 100644 --- a/Helpers/extps1/PE_Helper/files/startup/startnet.cmd +++ b/Helpers/extps1/PE_Helper/files/startup/startnet.cmd @@ -151,6 +151,8 @@ if %debug% lss 2 ( echo - To show hardware and software inventory, type "inv" and press ENTER echo - To change the keyboard layout, type "keyboardchange" and press ENTER echo - For more Windows PE commands, type "wpeutil" + echo - To manage volumes encrypted with BitLocker, use one or more of the following aliases: + echo Installed aliases: bdemgr bdelock bdeunlock bdeinfo bdeencrypt bdedecrypt echo. echo - To manually start the installation procedure, type "StartInstall" and press ENTER. You need a drive containing a Windows image echo - To start the Driver Installation Module in case you need to load drivers, type "StartDim" and press ENTER @@ -169,6 +171,7 @@ if %debug% lss 2 ( doskey bdemgr=cmd /c "%sysdrive%\Tools\BDE-GUI\bdemgr.bat" $* doskey bdelock=cmd /c "%sysdrive%\Tools\BDE-GUI\bdemgr.bat" lock doskey bdeunlock=cmd /c "%sysdrive%\Tools\BDE-GUI\bdemgr.bat" unlock + doskey bdeinfo=cmd /c "%sysdrive%\Tools\BDE-GUI\bdemgr.bat" info doskey bdeencrypt=cmd /c "%sysdrive%\Tools\BDE-GUI\bdemgr.bat" encrypt doskey bdedecrypt=cmd /c "%sysdrive%\Tools\BDE-GUI\bdemgr.bat" decrypt exit /b diff --git a/Helpers/extps1/PE_Helper/tools/BDE-GUI b/Helpers/extps1/PE_Helper/tools/BDE-GUI deleted file mode 160000 index 550c9d59..00000000 --- a/Helpers/extps1/PE_Helper/tools/BDE-GUI +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 550c9d59ea7d8366bceba8d3fac7bd063b395a69 diff --git a/MainForm.vb b/MainForm.vb index fd043b8e..a9b61cf6 100644 --- a/MainForm.vb +++ b/MainForm.vb @@ -596,7 +596,7 @@ Public Class MainForm " HotInstall: (c) " & GetCopyrightTimespan(2025, Date.Now.Year) & " CodingWonders Software" & CrLf & " Preboot eXecution Environment (PXE) Helpers: (c) " & GetCopyrightTimespan(2025, Date.Now.Year) & " CodingWonders Software" & CrLf & " Sysprep Preparation Tool: (c) " & GetCopyrightTimespan(2025, Date.Now.Year) & " CodingWonders Software. Testing helped by Real-MullaC" & CrLf & - " BDE-GUI: (c) " & GetCopyrightTimespan(2026, Date.Now.Year) & " CodingWonders Software.") + " BDE-GUI: (c) " & GetCopyrightTimespan(2026, Date.Now.Year) & " CodingWonders Software, DaleCooper.") DynaLog.LogMessage("- Scintilla.NET: " & "(c) " & GetCopyrightTimespan(2017, 2017) & " Jacob Slusser, " & "(c) " & GetCopyrightTimespan(2020, 2022) & " VPKSoft, " & From 5a56eb746110667bd7468c7c6318fbc54b57d975 Mon Sep 17 00:00:00 2001 From: CodingWonders <101426328+CodingWonders@users.noreply.github.com> Date: Tue, 21 Jul 2026 22:06:23 +0200 Subject: [PATCH 06/48] [PE Helper/BDE-GUI] Update submodule --- Helpers/extps1/PE_Helper/tools/BDE-GUI | 1 + 1 file changed, 1 insertion(+) create mode 160000 Helpers/extps1/PE_Helper/tools/BDE-GUI diff --git a/Helpers/extps1/PE_Helper/tools/BDE-GUI b/Helpers/extps1/PE_Helper/tools/BDE-GUI new file mode 160000 index 00000000..b620b1c9 --- /dev/null +++ b/Helpers/extps1/PE_Helper/tools/BDE-GUI @@ -0,0 +1 @@ +Subproject commit b620b1c9547896f0f13040ac3d68bf0c40199d81 From aec1267b9d5b54080e9fbaa4dd7c307b678540f8 Mon Sep 17 00:00:00 2001 From: CodingWonders <101426328+CodingWonders@users.noreply.github.com> Date: Wed, 22 Jul 2026 07:49:17 +0200 Subject: [PATCH 07/48] [PE Helper/BDE-GUI] Update submodule --- Helpers/extps1/PE_Helper/tools/BDE-GUI | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Helpers/extps1/PE_Helper/tools/BDE-GUI b/Helpers/extps1/PE_Helper/tools/BDE-GUI index b620b1c9..c46ea7f6 160000 --- a/Helpers/extps1/PE_Helper/tools/BDE-GUI +++ b/Helpers/extps1/PE_Helper/tools/BDE-GUI @@ -1 +1 @@ -Subproject commit b620b1c9547896f0f13040ac3d68bf0c40199d81 +Subproject commit c46ea7f6a521d81b7cf35ce1f3207bcf80414a6a From 7fec93df5e44d65b9fd3c8378f93832f15e87405 Mon Sep 17 00:00:00 2001 From: CodingWonders <101426328+CodingWonders@users.noreply.github.com> Date: Wed, 22 Jul 2026 08:31:21 +0200 Subject: [PATCH 08/48] [Enhance] Exporting drivers using multiple class names --- Panels/DoWork/ProgressPanel.vb | 46 ++++++++- .../Img_Ops/Drivers/ExportDrivers.Designer.vb | 98 ++++++++++++++++--- Panels/Img_Ops/Drivers/ExportDrivers.vb | 51 +++++++--- 3 files changed, 168 insertions(+), 27 deletions(-) diff --git a/Panels/DoWork/ProgressPanel.vb b/Panels/DoWork/ProgressPanel.vb index b5aa0d1f..03a59850 100644 --- a/Panels/DoWork/ProgressPanel.vb +++ b/Panels/DoWork/ProgressPanel.vb @@ -512,7 +512,8 @@ Public Class ProgressPanel ' OperationNum: 77 Public drvExportTarget As String ' Path the drivers will be exported to Public drvExportAllDrvs As Boolean ' Determines whether to export all drivers, or drivers based on the class name - Public drvExportSpecificClassName As String ' The class name that the drivers to export have set + Public drvExportSpecificClassNames As String() ' The class name that the drivers to export have set + Public drvExportOrganizeClassNameExports As Boolean ' Determines whether to organize exported drivers using folder named after class names Public drvExportWin7Mode As Boolean ' Run driver exports in Windows 7 mode ' OperationNum: 78 @@ -6028,7 +6029,7 @@ Public Class ProgressPanel DynaLog.LogMessage("Preparing to export image drivers...") DynaLog.LogMessage("Export target: " & Quote & drvExportTarget & Quote) DynaLog.LogMessage("Export all drivers? " & If(drvExportAllDrvs, "Yes", "No")) - If Not drvExportAllDrvs Then DynaLog.LogMessage("Class name to use as filter for driver exports: " & Quote & drvExportSpecificClassName & Quote) + If Not drvExportAllDrvs Then DynaLog.LogMessage("Class names to use as filter for driver exports: " & drvExportSpecificClassNames.Count) Select Case Language Case 0 Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName @@ -6067,7 +6068,8 @@ Public Class ProgressPanel LogView.AppendText(CrLf & "Exporting drivers to specified folder..." & CrLf & "- Export target: " & Quote & drvExportTarget & Quote & CrLf & "- Export all drivers, or just those with matching class names? " & If(drvExportAllDrvs, "All Drivers", "Drivers with matching class name") & CrLf & - "- If not all drivers are exported, which class name is used for drivers that will be exported? " & drvExportSpecificClassName & CrLf) + "- If not all drivers are exported, how many class names are being used? " & drvExportSpecificClassNames.Count & CrLf & + "- On selective driver export, organize results? " & If(drvExportOrganizeClassNameExports, "Yes", "No") & CrLf) If drvExportAllDrvs Then If drvExportWin7Mode Then Try @@ -6255,7 +6257,7 @@ Public Class ProgressPanel End Using DynaLog.LogMessage("Filtering driver collection based on class name...") - Dim driversToExport As IEnumerable(Of ImageDriver) = ImageDrivers.Where(Function(driver) driver.DriverClassName.Equals(drvExportSpecificClassName, StringComparison.OrdinalIgnoreCase)) + Dim driversToExport As IEnumerable(Of ImageDriver) = ImageDrivers.Where(Function(driver) drvExportSpecificClassNames.Select(Function(cn) cn.ToLowerInvariant()).Contains(driver.DriverClassName.ToLowerInvariant())) If driversToExport Is Nothing Then Exit Try DynaLog.LogMessage("Amount of drivers to export: " & driversToExport.Count) @@ -6264,6 +6266,23 @@ Public Class ProgressPanel LogView.AppendText(CrLf & "Exporting driver file " & Path.GetFileName(driverToExport.DriverOriginalFileName) & "...") Dim drvName As String = Path.GetFileName(driverToExport.DriverOriginalFileName) Dim destinationDriverPath As String = Path.Combine(drvExportTarget, drvName) + + ' If we are supposed to organize them based on class name, we'll detect if such folders exist and, if they + ' don't, we'll create them, so we have everything ready. + If drvExportOrganizeClassNameExports Then + Dim organizedDestinationDriverPath As String = Path.Combine(drvExportTarget, driverToExport.DriverClassName) + If Not Directory.Exists(organizedDestinationDriverPath) Then + Try + Directory.CreateDirectory(organizedDestinationDriverPath) + destinationDriverPath = Path.Combine(organizedDestinationDriverPath, drvName) + Catch ex As Exception + DynaLog.LogMessage("Could not organize exported driver. Error message: " & ex.Message & ". Driver will be exported to destination path without organization.") + End Try + Else + destinationDriverPath = Path.Combine(organizedDestinationDriverPath, drvName) + End If + End If + CopyRecursive(Path.GetDirectoryName(driverToExport.DriverOriginalFileName), destinationDriverPath) Next Catch ex As Exception @@ -6279,7 +6298,7 @@ Public Class ProgressPanel Dim driverPackages As DismDriverPackageCollection = DismApi.GetDrivers(session, False) If driverPackages Is Nothing Then Exit Try DynaLog.LogMessage("Filtering driver collection based on class name...") - Dim driversToExport As IEnumerable(Of DismDriverPackage) = driverPackages.Where(Function(driver) driver.ClassName.Equals(drvExportSpecificClassName, StringComparison.OrdinalIgnoreCase)) + Dim driversToExport As IEnumerable(Of DismDriverPackage) = driverPackages.Where(Function(driver) drvExportSpecificClassNames.Select(Function(cn) cn.ToLowerInvariant()).Contains(driver.ClassName.ToLowerInvariant())) If driversToExport Is Nothing Then Exit Try DynaLog.LogMessage("Amount of drivers to export: " & driversToExport.Count) @@ -6288,6 +6307,23 @@ Public Class ProgressPanel LogView.AppendText(CrLf & "Exporting driver file " & Path.GetFileName(driverToExport.OriginalFileName) & "...") Dim drvName As String = Path.GetFileName(driverToExport.OriginalFileName) Dim destinationDriverPath As String = Path.Combine(drvExportTarget, drvName) + + ' If we are supposed to organize them based on class name, we'll detect if such folders exist and, if they + ' don't, we'll create them, so we have everything ready. + If drvExportOrganizeClassNameExports Then + Dim organizedDestinationDriverPath As String = Path.Combine(drvExportTarget, driverToExport.ClassName) + If Not Directory.Exists(organizedDestinationDriverPath) Then + Try + Directory.CreateDirectory(organizedDestinationDriverPath) + destinationDriverPath = Path.Combine(organizedDestinationDriverPath, drvName) + Catch ex As Exception + DynaLog.LogMessage("Could not organize exported driver. Error message: " & ex.Message & ". Driver will be exported to destination path without organization.") + End Try + Else + destinationDriverPath = Path.Combine(organizedDestinationDriverPath, drvName) + End If + End If + CopyRecursive(Path.GetDirectoryName(driverToExport.OriginalFileName), destinationDriverPath) Next End Using diff --git a/Panels/Img_Ops/Drivers/ExportDrivers.Designer.vb b/Panels/Img_Ops/Drivers/ExportDrivers.Designer.vb index 2d9bed2b..0638ff87 100644 --- a/Panels/Img_Ops/Drivers/ExportDrivers.Designer.vb +++ b/Panels/Img_Ops/Drivers/ExportDrivers.Designer.vb @@ -30,6 +30,11 @@ Partial Class ExportDrivers Me.Button1 = New System.Windows.Forms.Button() Me.FolderBrowserDialog1 = New System.Windows.Forms.FolderBrowserDialog() Me.GroupBox1 = New System.Windows.Forms.GroupBox() + Me.Button3 = New System.Windows.Forms.Button() + Me.Button2 = New System.Windows.Forms.Button() + Me.CheckBox1 = New System.Windows.Forms.CheckBox() + Me.Panel1 = New System.Windows.Forms.Panel() + Me.SelectedClassNamesLB = New System.Windows.Forms.ListBox() Me.TableLayoutPanel2 = New System.Windows.Forms.TableLayoutPanel() Me.Label3 = New System.Windows.Forms.Label() Me.Label4 = New System.Windows.Forms.Label() @@ -40,6 +45,7 @@ Partial Class ExportDrivers Me.ImageTaskHeader1 = New DISMTools.ImageTaskHeader() Me.TableLayoutPanel1.SuspendLayout() Me.GroupBox1.SuspendLayout() + Me.Panel1.SuspendLayout() Me.TableLayoutPanel2.SuspendLayout() Me.SuspendLayout() ' @@ -51,7 +57,7 @@ Partial Class ExportDrivers Me.TableLayoutPanel1.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50.0!)) Me.TableLayoutPanel1.Controls.Add(Me.OK_Button, 0, 0) Me.TableLayoutPanel1.Controls.Add(Me.Cancel_Button, 1, 0) - Me.TableLayoutPanel1.Location = New System.Drawing.Point(466, 304) + Me.TableLayoutPanel1.Location = New System.Drawing.Point(466, 432) Me.TableLayoutPanel1.Name = "TableLayoutPanel1" Me.TableLayoutPanel1.RowCount = 1 Me.TableLayoutPanel1.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 50.0!)) @@ -112,18 +118,82 @@ Partial Class ExportDrivers ' 'GroupBox1 ' + Me.GroupBox1.Anchor = CType((((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Bottom) _ + Or System.Windows.Forms.AnchorStyles.Left) _ + Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.GroupBox1.Controls.Add(Me.Button3) + Me.GroupBox1.Controls.Add(Me.Button2) + Me.GroupBox1.Controls.Add(Me.CheckBox1) + Me.GroupBox1.Controls.Add(Me.Panel1) Me.GroupBox1.Controls.Add(Me.TableLayoutPanel2) Me.GroupBox1.Controls.Add(Me.RadioButton2) Me.GroupBox1.Controls.Add(Me.RadioButton1) Me.GroupBox1.Location = New System.Drawing.Point(12, 98) Me.GroupBox1.Name = "GroupBox1" - Me.GroupBox1.Size = New System.Drawing.Size(600, 200) + Me.GroupBox1.Size = New System.Drawing.Size(600, 328) Me.GroupBox1.TabIndex = 9 Me.GroupBox1.TabStop = False Me.GroupBox1.Text = "Driver Export Mode" ' + 'Button3 + ' + Me.Button3.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.Button3.Enabled = False + Me.Button3.FlatStyle = System.Windows.Forms.FlatStyle.System + Me.Button3.Location = New System.Drawing.Point(454, 276) + Me.Button3.Name = "Button3" + Me.Button3.Size = New System.Drawing.Size(140, 23) + Me.Button3.TabIndex = 4 + Me.Button3.Text = "Remove Class Name" + Me.Button3.UseVisualStyleBackColor = True + ' + 'Button2 + ' + Me.Button2.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.Button2.FlatStyle = System.Windows.Forms.FlatStyle.System + Me.Button2.Location = New System.Drawing.Point(308, 276) + Me.Button2.Name = "Button2" + Me.Button2.Size = New System.Drawing.Size(140, 23) + Me.Button2.TabIndex = 4 + Me.Button2.Text = "Add Class Name" + Me.Button2.UseVisualStyleBackColor = True + ' + 'CheckBox1 + ' + Me.CheckBox1.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left), System.Windows.Forms.AnchorStyles) + Me.CheckBox1.CheckAlign = System.Drawing.ContentAlignment.TopLeft + Me.CheckBox1.Location = New System.Drawing.Point(41, 276) + Me.CheckBox1.Name = "CheckBox1" + Me.CheckBox1.Size = New System.Drawing.Size(261, 36) + Me.CheckBox1.TabIndex = 3 + Me.CheckBox1.Text = "Organize exported drivers into folders named after their class names" + Me.CheckBox1.TextAlign = System.Drawing.ContentAlignment.TopLeft + Me.CheckBox1.UseVisualStyleBackColor = True + ' + 'Panel1 + ' + Me.Panel1.Anchor = CType((((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Bottom) _ + Or System.Windows.Forms.AnchorStyles.Left) _ + Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.Panel1.Controls.Add(Me.SelectedClassNamesLB) + Me.Panel1.Location = New System.Drawing.Point(41, 71) + Me.Panel1.Name = "Panel1" + Me.Panel1.Size = New System.Drawing.Size(553, 95) + Me.Panel1.TabIndex = 2 + ' + 'SelectedClassNamesLB + ' + Me.SelectedClassNamesLB.Dock = System.Windows.Forms.DockStyle.Fill + Me.SelectedClassNamesLB.FormattingEnabled = True + Me.SelectedClassNamesLB.IntegralHeight = False + Me.SelectedClassNamesLB.Location = New System.Drawing.Point(0, 0) + Me.SelectedClassNamesLB.Name = "SelectedClassNamesLB" + Me.SelectedClassNamesLB.Size = New System.Drawing.Size(553, 95) + Me.SelectedClassNamesLB.TabIndex = 0 + ' 'TableLayoutPanel2 ' + Me.TableLayoutPanel2.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left), System.Windows.Forms.AnchorStyles) Me.TableLayoutPanel2.ColumnCount = 2 Me.TableLayoutPanel2.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 22.9656391!)) Me.TableLayoutPanel2.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 77.0343628!)) @@ -132,12 +202,12 @@ Partial Class ExportDrivers Me.TableLayoutPanel2.Controls.Add(Me.Label5, 1, 1) Me.TableLayoutPanel2.Controls.Add(Me.ComboBox1, 1, 0) Me.TableLayoutPanel2.Enabled = False - Me.TableLayoutPanel2.Location = New System.Drawing.Point(41, 71) + Me.TableLayoutPanel2.Location = New System.Drawing.Point(41, 172) Me.TableLayoutPanel2.Name = "TableLayoutPanel2" Me.TableLayoutPanel2.RowCount = 2 - Me.TableLayoutPanel2.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 23.57724!)) - Me.TableLayoutPanel2.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 76.4227676!)) - Me.TableLayoutPanel2.Size = New System.Drawing.Size(553, 123) + Me.TableLayoutPanel2.RowStyles.Add(New System.Windows.Forms.RowStyle()) + Me.TableLayoutPanel2.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100.0!)) + Me.TableLayoutPanel2.Size = New System.Drawing.Size(553, 98) Me.TableLayoutPanel2.TabIndex = 1 ' 'Label3 @@ -155,7 +225,7 @@ Partial Class ExportDrivers Me.Label4.Dock = System.Windows.Forms.DockStyle.Fill Me.Label4.Location = New System.Drawing.Point(3, 29) Me.Label4.Name = "Label4" - Me.Label4.Size = New System.Drawing.Size(120, 94) + Me.Label4.Size = New System.Drawing.Size(120, 69) Me.Label4.TabIndex = 0 Me.Label4.Text = "Class Name Notes:" ' @@ -165,7 +235,7 @@ Partial Class ExportDrivers Me.Label5.Dock = System.Windows.Forms.DockStyle.Fill Me.Label5.Location = New System.Drawing.Point(129, 29) Me.Label5.Name = "Label5" - Me.Label5.Size = New System.Drawing.Size(421, 94) + Me.Label5.Size = New System.Drawing.Size(421, 69) Me.Label5.TabIndex = 0 ' 'ComboBox1 @@ -182,9 +252,9 @@ Partial Class ExportDrivers Me.RadioButton2.AutoSize = True Me.RadioButton2.Location = New System.Drawing.Point(24, 47) Me.RadioButton2.Name = "RadioButton2" - Me.RadioButton2.Size = New System.Drawing.Size(373, 17) + Me.RadioButton2.Size = New System.Drawing.Size(378, 17) Me.RadioButton2.TabIndex = 0 - Me.RadioButton2.Text = "Export drivers with the following matching class name to the destination:" + Me.RadioButton2.Text = "Export drivers with the following matching class names to the destination:" Me.RadioButton2.UseVisualStyleBackColor = True ' 'RadioButton1 @@ -219,7 +289,7 @@ Partial Class ExportDrivers Me.AutoScaleDimensions = New System.Drawing.SizeF(96.0!, 96.0!) Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi Me.CancelButton = Me.Cancel_Button - Me.ClientSize = New System.Drawing.Size(624, 345) + Me.ClientSize = New System.Drawing.Size(624, 473) Me.Controls.Add(Me.ImageTaskHeader1) Me.Controls.Add(Me.GroupBox1) Me.Controls.Add(Me.Button1) @@ -237,6 +307,7 @@ Partial Class ExportDrivers Me.TableLayoutPanel1.ResumeLayout(False) Me.GroupBox1.ResumeLayout(False) Me.GroupBox1.PerformLayout() + Me.Panel1.ResumeLayout(False) Me.TableLayoutPanel2.ResumeLayout(False) Me.ResumeLayout(False) Me.PerformLayout() @@ -258,5 +329,10 @@ Partial Class ExportDrivers Friend WithEvents RadioButton2 As System.Windows.Forms.RadioButton Friend WithEvents RadioButton1 As System.Windows.Forms.RadioButton Friend WithEvents ImageTaskHeader1 As DISMTools.ImageTaskHeader + Friend WithEvents Button3 As System.Windows.Forms.Button + Friend WithEvents Button2 As System.Windows.Forms.Button + Friend WithEvents CheckBox1 As System.Windows.Forms.CheckBox + Friend WithEvents Panel1 As System.Windows.Forms.Panel + Friend WithEvents SelectedClassNamesLB As System.Windows.Forms.ListBox End Class diff --git a/Panels/Img_Ops/Drivers/ExportDrivers.vb b/Panels/Img_Ops/Drivers/ExportDrivers.vb index 1d42601b..3ed60f6e 100644 --- a/Panels/Img_Ops/Drivers/ExportDrivers.vb +++ b/Panels/Img_Ops/Drivers/ExportDrivers.vb @@ -5,8 +5,6 @@ Imports Microsoft.Dism Public Class ExportDrivers - Private SelectedClass As String - Private DriverClassInfoDictionary As New Dictionary(Of String, String) From { {"AudioProcessingObject", "Includes Audio processing objects (APOs). For more info, see Windows Audio Processing Objects."}, {"Battery", "Includes battery devices and UPS devices."}, @@ -103,12 +101,17 @@ Public Class ExportDrivers MsgBox(msg, vbOKOnly + vbCritical, ImageTaskHeader1.ItemText) Exit Sub End If - If RadioButton2.Checked AndAlso ComboBox1.SelectedItem = "-----------------" Then - MessageBox.Show("This class name is not valid.", ImageTaskHeader1.ItemText, MessageBoxButtons.OK, MessageBoxIcon.Stop) + If RadioButton2.Checked AndAlso SelectedClassNamesLB.Items.Count < 1 Then + MessageBox.Show("Please specify class names to export and try again.", ImageTaskHeader1.ItemText, MessageBoxButtons.OK, MessageBoxIcon.Stop) + Exit Sub + End If + If RadioButton2.Checked AndAlso SelectedClassNamesLB.Items.Contains("-----------------") Then + MessageBox.Show("One or more class names are not valid.", ImageTaskHeader1.ItemText, MessageBoxButtons.OK, MessageBoxIcon.Stop) Exit Sub End If ProgressPanel.drvExportAllDrvs = RadioButton1.Checked - ProgressPanel.drvExportSpecificClassName = SelectedClass + ProgressPanel.drvExportSpecificClassNames = SelectedClassNamesLB.Items.Cast(Of String)().ToArray() + ProgressPanel.drvExportOrganizeClassNameExports = CheckBox1.Checked ProgressPanel.OperationNum = 77 ' Windows 7 behaves differently from Windows 8 and later when getting drivers. ProgressPanel.drvExportWin7Mode = MainForm.CurrentImage.ImageVersion.Major = 6 AndAlso MainForm.CurrentImage.ImageVersion.Minor = 1 @@ -217,13 +220,14 @@ Public Class ExportDrivers TextBox1.ForeColor = ForeColor ComboBox1.BackColor = CurrentTheme.SectionBackgroundColor ComboBox1.ForeColor = ForeColor + SelectedClassNamesLB.BackColor = CurrentTheme.SectionBackgroundColor + SelectedClassNamesLB.ForeColor = ForeColor Dim handle As IntPtr = WindowHelper.GetWindowHandle(Me) WindowHelper.ToggleDarkTitleBar(handle, CurrentTheme.IsDark) ThemeHelper.UpdateLinkLabelColors(Me, Color.DodgerBlue, CurrentTheme.AccentColors(0)) ComboBox1.Items.Clear() ComboBox1.Items.AddRange(DriverClassInfoDictionary.Keys.ToArray()) - ComboBox1.SelectedItem = SelectedClass ImageTaskHeader1.HideWindowTitle(handle) Try @@ -255,22 +259,47 @@ Public Class ExportDrivers End Sub Private Sub RadioButton1_CheckedChanged(sender As Object, e As EventArgs) Handles RadioButton1.CheckedChanged + SelectedClassNamesLB.Enabled = Not RadioButton1.Checked TableLayoutPanel2.Enabled = Not RadioButton1.Checked + Button2.Enabled = Not RadioButton1.Checked + Button3.Enabled = Not RadioButton1.Checked + CheckBox1.Enabled = Not RadioButton1.Checked End Sub Private Sub ComboBox1_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ComboBox1.SelectedIndexChanged If DriverClassInfoDictionary.ContainsKey(ComboBox1.SelectedItem) Then Dim SelectedClassInfo As KeyValuePair(Of String, String) = DriverClassInfoDictionary.ElementAtOrDefault(ComboBox1.SelectedIndex) - If SelectedClassInfo.Value IsNot Nothing Then - Label5.Text = SelectedClassInfo.Value - SelectedClass = SelectedClassInfo.Key - End If + If SelectedClassInfo.Value IsNot Nothing Then Label5.Text = SelectedClassInfo.Value Else ' We are using a class name that is not in the default set; accept it anyway, ' but don't show any notes because we don't know where these are, or whether ' they are localized. Label5.Text = "" - SelectedClass = ComboBox1.SelectedItem End If End Sub + + Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click + If DriverClassInfoDictionary.ContainsKey(ComboBox1.SelectedItem) Then + Dim SelectedClassInfo As KeyValuePair(Of String, String) = DriverClassInfoDictionary.ElementAtOrDefault(ComboBox1.SelectedIndex) + If SelectedClassInfo.Value IsNot Nothing Then SelectedClassNamesLB.Items.Add(SelectedClassInfo.Key) + Else + ' We are using a class name that is not in the default set; accept it anyway, + ' but don't show any notes because we don't know where these are, or whether + ' they are localized. + SelectedClassNamesLB.Items.Add(ComboBox1.SelectedItem) + End If + End Sub + + Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click + Try + SelectedClassNamesLB.Items.Remove(SelectedClassNamesLB.SelectedItem) + Catch ex As Exception + + End Try + Button3.Enabled = False + End Sub + + Private Sub SelectedClassNamesLB_SelectedIndexChanged(sender As Object, e As EventArgs) Handles SelectedClassNamesLB.SelectedIndexChanged + Button3.Enabled = SelectedClassNamesLB.SelectedItems.Count = 1 + End Sub End Class From 60c4a2330c3f165c9d333a91e1a99e81a7d32f71 Mon Sep 17 00:00:00 2001 From: CodingWonders <101426328+CodingWonders@users.noreply.github.com> Date: Wed, 22 Jul 2026 08:39:08 +0200 Subject: [PATCH 09/48] [Fix] Handle empty items --- Panels/Img_Ops/Drivers/ExportDrivers.vb | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/Panels/Img_Ops/Drivers/ExportDrivers.vb b/Panels/Img_Ops/Drivers/ExportDrivers.vb index 3ed60f6e..5a935088 100644 --- a/Panels/Img_Ops/Drivers/ExportDrivers.vb +++ b/Panels/Img_Ops/Drivers/ExportDrivers.vb @@ -279,15 +279,19 @@ Public Class ExportDrivers End Sub Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click - If DriverClassInfoDictionary.ContainsKey(ComboBox1.SelectedItem) Then - Dim SelectedClassInfo As KeyValuePair(Of String, String) = DriverClassInfoDictionary.ElementAtOrDefault(ComboBox1.SelectedIndex) - If SelectedClassInfo.Value IsNot Nothing Then SelectedClassNamesLB.Items.Add(SelectedClassInfo.Key) - Else - ' We are using a class name that is not in the default set; accept it anyway, - ' but don't show any notes because we don't know where these are, or whether - ' they are localized. - SelectedClassNamesLB.Items.Add(ComboBox1.SelectedItem) - End If + Try + If DriverClassInfoDictionary.ContainsKey(ComboBox1.SelectedItem) Then + Dim SelectedClassInfo As KeyValuePair(Of String, String) = DriverClassInfoDictionary.ElementAtOrDefault(ComboBox1.SelectedIndex) + If SelectedClassInfo.Value IsNot Nothing Then SelectedClassNamesLB.Items.Add(SelectedClassInfo.Key) + Else + ' We are using a class name that is not in the default set; accept it anyway, + ' but don't show any notes because we don't know where these are, or whether + ' they are localized. + SelectedClassNamesLB.Items.Add(ComboBox1.SelectedItem) + End If + Catch ex As Exception + + End Try End Sub Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click From e514c099667c8d67c4d9e06c700e2f63df1f1f13 Mon Sep 17 00:00:00 2001 From: CodingWonders <101426328+CodingWonders@users.noreply.github.com> Date: Wed, 22 Jul 2026 20:29:50 +0200 Subject: [PATCH 10/48] [Enhance] Don't wait --- MainForm.vb | 1 - 1 file changed, 1 deletion(-) diff --git a/MainForm.vb b/MainForm.vb index a9b61cf6..04cddf8e 100644 --- a/MainForm.vb +++ b/MainForm.vb @@ -681,7 +681,6 @@ Public Class MainForm End Try End If If Not Debugger.IsAttached Then SplashScreen.Show() - Thread.Sleep(2000) ' I once tested this on a computer which didn't require me to ask for admin privileges. This is a requirement of DISM. Check this If Not My.User.IsInRole(ApplicationServices.BuiltInRole.Administrator) Then DynaLog.LogMessage("This user is not part of the Administrators group/role -- aborting any future procedures!") From 299ec78783eba15e2770564f8a5a766bc410c36e Mon Sep 17 00:00:00 2001 From: CodingWonders <101426328+CodingWonders@users.noreply.github.com> Date: Wed, 22 Jul 2026 22:17:43 +0200 Subject: [PATCH 11/48] [ISO Creator] Delete ISOTASKS when all tasks finish --- Panels/ISOFiles/ISOCreator.vb | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/Panels/ISOFiles/ISOCreator.vb b/Panels/ISOFiles/ISOCreator.vb index 6470eed1..7d49cf95 100644 --- a/Panels/ISOFiles/ISOCreator.vb +++ b/Panels/ISOFiles/ISOCreator.vb @@ -1027,6 +1027,13 @@ Public Class ISOCreator GroupBox1.Enabled = True IdlePanel.Visible = True ISOProgressPanel.Visible = False + + ' Delete ISOTASKS + Try + Directory.Delete(String.Format("{0}\ISOTASKS", Environment.GetEnvironmentVariable("SYSTEMDRIVE")), True) + Catch ex As Exception + + End Try End If End If End Sub From 46e7eab51ca270fde8ee582bbdee5c271afa2851 Mon Sep 17 00:00:00 2001 From: CodingWonders <101426328+CodingWonders@users.noreply.github.com> Date: Thu, 23 Jul 2026 07:44:38 +0200 Subject: [PATCH 12/48] [Enhance] No more waiting --- MainForm.vb | 1 - 1 file changed, 1 deletion(-) diff --git a/MainForm.vb b/MainForm.vb index 04cddf8e..57b26a46 100644 --- a/MainForm.vb +++ b/MainForm.vb @@ -354,7 +354,6 @@ Public Class MainForm ElseIf arg.StartsWith("/migrate", StringComparison.OrdinalIgnoreCase) Then DynaLog.LogMessage("Setting migration has been requested by the user or by DTUCS. Migrating settings...") MigrationForm.ShowDialog() - Thread.Sleep(1500) ElseIf arg.StartsWith("/nomig", StringComparison.OrdinalIgnoreCase) Then DynaLog.LogMessage("Setting migration has been disabled. Unless you are testing a build straight out of the build process, a configuration file may be incompatible") NoMigration = True From c845d10cafefa2325c74a236ce5e7074737d9438 Mon Sep 17 00:00:00 2001 From: CodingWonders <101426328+CodingWonders@users.noreply.github.com> Date: Thu, 23 Jul 2026 15:40:07 +0200 Subject: [PATCH 13/48] [Enhance] Configurable concurrent ISO creation limit --- Installer/dt.iss | 1 + MainForm.vb | 20 +++-- Panels/Exe_Ops/Options.Designer.vb | 140 ++++++++++++++++++++--------- Panels/Exe_Ops/Options.resx | 5 ++ Panels/Exe_Ops/Options.vb | 6 ++ Panels/ISOFiles/ISOCreator.vb | 4 +- settings.ini | 1 + 7 files changed, 126 insertions(+), 51 deletions(-) diff --git a/Installer/dt.iss b/Installer/dt.iss index a25ce806..4407c307 100644 --- a/Installer/dt.iss +++ b/Installer/dt.iss @@ -176,6 +176,7 @@ Root: HKCU; Subkey: "Software\DISMTools\Preview\ImgOps"; ValueType: string; Valu Root: HKCU; Subkey: "Software\DISMTools\Preview\ImgOps"; ValueType: dword; ValueName: "PEHelper.CopyToVentoy"; ValueData: 0; Flags: uninsdeletevalue createvalueifdoesntexist Root: HKCU; Subkey: "Software\DISMTools\Preview\ImgOps"; ValueType: dword; ValueName: "PEHelper.Use2023EFI"; ValueData: 0; Flags: uninsdeletevalue createvalueifdoesntexist Root: HKCU; Subkey: "Software\DISMTools\Preview\ImgOps"; ValueType: dword; ValueName: "PEHelper.IncludeSysDrvs"; ValueData: 1; Flags: uninsdeletevalue createvalueifdoesntexist +Root: HKCU; Subkey: "Software\DISMTools\Preview\ImgOps"; ValueType: dword; ValueName: "PEHelper.MaxConcurrentISO"; ValueData: 2; Flags: uninsdeletevalue createvalueifdoesntexist Root: HKCU; Subkey: "Software\DISMTools\Preview\ImgOps"; ValueType: dword; ValueName: "Quiet"; ValueData: 0; Flags: uninsdeletevalue createvalueifdoesntexist Root: HKCU; Subkey: "Software\DISMTools\Preview\ImgOps"; ValueType: dword; ValueName: "AppxRemovalDisplayNameFormat"; ValueData: 1; Flags: uninsdeletevalue createvalueifdoesntexist Root: HKCU; Subkey: "Software\DISMTools\Preview\ImgOps"; ValueType: dword; ValueName: "PreventSystemFromSleeping"; ValueData: 1; Flags: uninsdeletevalue createvalueifdoesntexist diff --git a/MainForm.vb b/MainForm.vb index 57b26a46..70c4b61c 100644 --- a/MainForm.vb +++ b/MainForm.vb @@ -204,6 +204,7 @@ Public Class MainForm Public PEHelper_CopyToVentoy As Boolean = False ' Whether to copy new ISO files to Ventoy drives automatically Public PEHelper_Use2023EFI As Boolean = False ' Whether to use Windows UEFI CA 2023-signed boot binaries (EFI ONLY) Public PEHelper_IncludeSysDrvs As Boolean = True ' Whether to include SCSI adapters and network controllers in the DTPE + Public PEHelper_MaxConcurrentISO As Integer = 2 ' Limit for concurrent ISO file creation ' Web Search Settings Public SearchEngineName As String = "DuckDuckGo" ' The name of the selected search engine @@ -1599,6 +1600,7 @@ Public Class MainForm PEHelper_CopyToVentoy = (CInt(ImgOpKey.GetValue("PEHelper.CopyToVentoy")) = 1) PEHelper_Use2023EFI = (CInt(ImgOpKey.GetValue("PEHelper.Use2023EFI")) = 1) PEHelper_IncludeSysDrvs = (CInt(ImgOpKey.GetValue("PEHelper.IncludeSysDrvs")) = 1) + PEHelper_MaxConcurrentISO = CInt(ImgOpKey.GetValue("PEHelper.MaxConcurrentISO")) AppxDisplayNameFormatOnRemoval = CInt(ImgOpKey.GetValue("AppxRemovalDisplayNameFormat")) PreventSystemFromSleeping = CInt(ImgOpKey.GetValue("PreventSystemFromSleeping", 1)) = 1 HumanizeDates = CInt(ImgOpKey.GetValue("HumanizeDates", 1)) = 1 @@ -1731,6 +1733,7 @@ Public Class MainForm PEHelper_CopyToVentoy = CInt(settingData("ImgOps")("PEHelper.CopyToVentoy")) = 1 PEHelper_Use2023EFI = CInt(settingData("ImgOps")("PEHelper.Use2023EFI")) = 1 PEHelper_IncludeSysDrvs = CInt(settingData("ImgOps")("PEHelper.IncludeSysDrvs")) = 1 + PEHelper_MaxConcurrentISO = CInt(settingData("ImgOps")("PEHelper.MaxConcurrentISO")) AppxDisplayNameFormatOnRemoval = CInt(settingData("ImgOps")("AppxRemovalDisplayNameFormat")) PreventSystemFromSleeping = CInt(settingData("ImgOps")("PreventSystemFromSleeping")) = 1 HumanizeDates = CInt(settingData("ImgOps")("HumanizeDates")) = 1 @@ -1843,12 +1846,8 @@ Public Class MainForm End Try End If End If - If AppxDisplayNameFormatOnRemoval < 0 OrElse AppxDisplayNameFormatOnRemoval > 2 Then - AppxDisplayNameFormatOnRemoval = 1 - End If - If isExeProblematic Or isLogFontProblematic Or isLogFileProblematic Or isScratchDirProblematic Then - InvalidSettingsTSMI.Visible = True - End If + If AppxDisplayNameFormatOnRemoval < 0 OrElse AppxDisplayNameFormatOnRemoval > 2 Then AppxDisplayNameFormatOnRemoval = 1 + If isExeProblematic Or isLogFontProblematic Or isLogFileProblematic Or isScratchDirProblematic Then InvalidSettingsTSMI.Visible = True If PartTableOverridePreference < 0 OrElse PartTableOverridePreference > 2 Then PartTableOverridePreference = 0 If UEFICA23Preference < 0 OrElse UEFICA23Preference > 2 Then UEFICA23Preference = 0 If WDSHCConnAttempts < 2 OrElse WDSHCConnAttempts > 16 Then WDSHCConnAttempts = 5 @@ -1863,6 +1862,8 @@ Public Class MainForm End Try WriteDefaultPEPolicy() + + If PEHelper_MaxConcurrentISO < 1 OrElse PEHelper_MaxConcurrentISO > 10 Then PEHelper_MaxConcurrentISO = 2 End Sub Public Sub WriteDefaultPEPolicy() @@ -1949,6 +1950,7 @@ Public Class MainForm "PEHelper_CopyToVentoy = " & PEHelper_CopyToVentoy & CrLf & "PEHelper_Use2023EFI = " & PEHelper_Use2023EFI & CrLf & "PEHelper_IncludeSysDrvs = " & PEHelper_IncludeSysDrvs & CrLf & + "PEHelper_MaxConcurrentISO = " & PEHelper_MaxConcurrentISO & CrLf & "NoRestart = " & SysNoRestart & CrLf & "AppxRemovalDisplayNameFrmt = " & AppxDisplayNameFormatOnRemoval & CrLf & "PreventSystemFromSleeping = " & PreventSystemFromSleeping & CrLf & @@ -4174,6 +4176,8 @@ Public Class MainForm settingsData("ImgOps").AddKey("PEHelper.UnattendedFile", Quote & Quote) settingsData("ImgOps").AddKey("PEHelper.CopyToVentoy", 0) settingsData("ImgOps").AddKey("PEHelper.Use2023EFI", 0) + settingsData("ImgOps").AddKey("PEHelper.IncludeSysDrvs", 1) + settingsData("ImgOps").AddKey("PEHelper.MaxConcurrentISO", 2) settingsData("ImgOps").AddKey("AppxRemovalDisplayNameFormat", 1) settingsData("ImgOps").AddKey("PreventSystemFromSleeping", 1) settingsData("ImgOps").AddKey("HumanizeDates", 1) @@ -4273,6 +4277,8 @@ Public Class MainForm ImgOpKey.SetValue("PEHelper.UnattendedFile", "", RegistryValueKind.String) ImgOpKey.SetValue("PEHelper.CopyToVentoy", 0, RegistryValueKind.DWord) ImgOpKey.SetValue("PEHelper.Use2023EFI", 0, RegistryValueKind.DWord) + ImgOpKey.SetValue("PEHelper.IncludeSysDrvs", 1, RegistryValueKind.DWord) + ImgOpKey.SetValue("PEHelper.MaxConcurrentISO", 2, RegistryValueKind.DWord) ImgOpKey.SetValue("AppxRemovalDisplayNameFormat", 1, RegistryValueKind.DWord) ImgOpKey.SetValue("PreventSystemFromSleeping", 1, RegistryValueKind.DWord) ImgOpKey.SetValue("HumanizeDates", 1, RegistryValueKind.DWord) @@ -4381,6 +4387,7 @@ Public Class MainForm settingsData("ImgOps").AddKey("PEHelper.CopyToVentoy", If(PEHelper_CopyToVentoy, 1, 0)) settingsData("ImgOps").AddKey("PEHelper.Use2023EFI", If(PEHelper_Use2023EFI, 1, 0)) settingsData("ImgOps").AddKey("PEHelper.IncludeSysDrvs", If(PEHelper_IncludeSysDrvs, 1, 0)) + settingsData("ImgOps").AddKey("PEHelper.MaxConcurrentISO", PEHelper_MaxConcurrentISO) settingsData("ImgOps").AddKey("AppxRemovalDisplayNameFormat", AppxDisplayNameFormatOnRemoval) settingsData("ImgOps").AddKey("PreventSystemFromSleeping", If(PreventSystemFromSleeping, 1, 0)) settingsData("ImgOps").AddKey("HumanizeDates", If(HumanizeDates, 1, 0)) @@ -4486,6 +4493,7 @@ Public Class MainForm ImgOpKey.SetValue("PEHelper.CopyToVentoy", PEHelper_CopyToVentoy, RegistryValueKind.DWord) ImgOpKey.SetValue("PEHelper.Use2023EFI", PEHelper_Use2023EFI, RegistryValueKind.DWord) ImgOpKey.SetValue("PEHelper.IncludeSysDrvs", PEHelper_IncludeSysDrvs, RegistryValueKind.DWord) + ImgOpKey.SetValue("PEHelper.MaxConcurrentISO", PEHelper_MaxConcurrentISO, RegistryValueKind.DWord) ImgOpKey.SetValue("AppxRemovalDisplayNameFormat", AppxDisplayNameFormatOnRemoval, RegistryValueKind.DWord) ImgOpKey.SetValue("PreventSystemFromSleeping", PreventSystemFromSleeping, RegistryValueKind.DWord) ImgOpKey.SetValue("HumanizeDates", HumanizeDates, RegistryValueKind.DWord) diff --git a/Panels/Exe_Ops/Options.Designer.vb b/Panels/Exe_Ops/Options.Designer.vb index 181c786c..ae99c17c 100644 --- a/Panels/Exe_Ops/Options.Designer.vb +++ b/Panels/Exe_Ops/Options.Designer.vb @@ -155,8 +155,6 @@ Partial Class Options Me.PictureBox20 = New System.Windows.Forms.PictureBox() Me.Label34 = New System.Windows.Forms.Label() Me.ValueContainer = New System.Windows.Forms.Panel() - Me.Options_FileAssocs = New System.Windows.Forms.Panel() - Me.FlowLayoutPanel10 = New System.Windows.Forms.FlowLayoutPanel() Me.Options_ImgOps = New System.Windows.Forms.Panel() Me.FlowLayoutPanel5 = New System.Windows.Forms.FlowLayoutPanel() Me.Panel6 = New System.Windows.Forms.Panel() @@ -171,6 +169,7 @@ Partial Class Options Me.Label70 = New System.Windows.Forms.Label() Me.Label32 = New System.Windows.Forms.Label() Me.CheckBox23 = New System.Windows.Forms.CheckBox() + Me.CheckBox25 = New System.Windows.Forms.CheckBox() Me.CheckBox1 = New System.Windows.Forms.CheckBox() Me.CheckBox8 = New System.Windows.Forms.CheckBox() Me.Panel7 = New System.Windows.Forms.Panel() @@ -183,6 +182,8 @@ Partial Class Options Me.Label69 = New System.Windows.Forms.Label() Me.Label67 = New System.Windows.Forms.Label() Me.Label68 = New System.Windows.Forms.Label() + Me.Options_FileAssocs = New System.Windows.Forms.Panel() + Me.FlowLayoutPanel10 = New System.Windows.Forms.FlowLayoutPanel() Me.Options_Shutdown = New System.Windows.Forms.Panel() Me.FlowLayoutPanel12 = New System.Windows.Forms.FlowLayoutPanel() Me.Panel23 = New System.Windows.Forms.Panel() @@ -258,7 +259,10 @@ Partial Class Options Me.Panel12 = New System.Windows.Forms.Panel() Me.EditorOFD = New System.Windows.Forms.OpenFileDialog() Me.ImageTaskHeader1 = New DISMTools.ImageTaskHeader() - Me.CheckBox25 = New System.Windows.Forms.CheckBox() + Me.Label1 = New System.Windows.Forms.Label() + Me.Label6 = New System.Windows.Forms.Label() + Me.NumericUpDown2 = New System.Windows.Forms.NumericUpDown() + Me.Label35 = New System.Windows.Forms.Label() Me.TableLayoutPanel1.SuspendLayout() Me.Panel3.SuspendLayout() CType(Me.PictureBox8, System.ComponentModel.ISupportInitialize).BeginInit() @@ -303,14 +307,14 @@ Partial Class Options Me.ShutdownSectionBtn.SuspendLayout() CType(Me.PictureBox20, System.ComponentModel.ISupportInitialize).BeginInit() Me.ValueContainer.SuspendLayout() - Me.Options_FileAssocs.SuspendLayout() - Me.FlowLayoutPanel10.SuspendLayout() Me.Options_ImgOps.SuspendLayout() Me.FlowLayoutPanel5.SuspendLayout() Me.Panel6.SuspendLayout() Me.TableLayoutPanel3.SuspendLayout() Me.Panel7.SuspendLayout() Me.Panel21.SuspendLayout() + Me.Options_FileAssocs.SuspendLayout() + Me.FlowLayoutPanel10.SuspendLayout() Me.Options_Shutdown.SuspendLayout() Me.FlowLayoutPanel12.SuspendLayout() Me.Panel23.SuspendLayout() @@ -350,6 +354,7 @@ Partial Class Options Me.FlowLayoutPanel8.SuspendLayout() Me.Panel11.SuspendLayout() Me.Panel12.SuspendLayout() + CType(Me.NumericUpDown2, System.ComponentModel.ISupportInitialize).BeginInit() Me.SuspendLayout() ' 'TableLayoutPanel1 @@ -1740,27 +1745,6 @@ Partial Class Options Me.ValueContainer.Size = New System.Drawing.Size(748, 465) Me.ValueContainer.TabIndex = 4 ' - 'Options_FileAssocs - ' - Me.Options_FileAssocs.Controls.Add(Me.FlowLayoutPanel10) - Me.Options_FileAssocs.Dock = System.Windows.Forms.DockStyle.Fill - Me.Options_FileAssocs.Location = New System.Drawing.Point(0, 0) - Me.Options_FileAssocs.Name = "Options_FileAssocs" - Me.Options_FileAssocs.Size = New System.Drawing.Size(748, 465) - Me.Options_FileAssocs.TabIndex = 8 - Me.Options_FileAssocs.Visible = False - ' - 'FlowLayoutPanel10 - ' - Me.FlowLayoutPanel10.AutoScroll = True - Me.FlowLayoutPanel10.Controls.Add(Me.Panel2) - Me.FlowLayoutPanel10.Controls.Add(Me.Panel3) - Me.FlowLayoutPanel10.Dock = System.Windows.Forms.DockStyle.Fill - Me.FlowLayoutPanel10.Location = New System.Drawing.Point(0, 0) - Me.FlowLayoutPanel10.Name = "FlowLayoutPanel10" - Me.FlowLayoutPanel10.Size = New System.Drawing.Size(748, 465) - Me.FlowLayoutPanel10.TabIndex = 0 - ' 'Options_ImgOps ' Me.Options_ImgOps.Controls.Add(Me.FlowLayoutPanel5) @@ -1785,10 +1769,14 @@ Partial Class Options ' 'Panel6 ' + Me.Panel6.Controls.Add(Me.NumericUpDown2) + Me.Panel6.Controls.Add(Me.Label6) Me.Panel6.Controls.Add(Me.LinkLabel4) Me.Panel6.Controls.Add(Me.TableLayoutPanel3) Me.Panel6.Controls.Add(Me.ComboBox8) Me.Panel6.Controls.Add(Me.Label71) + Me.Panel6.Controls.Add(Me.Label35) + Me.Panel6.Controls.Add(Me.Label1) Me.Panel6.Controls.Add(Me.Label70) Me.Panel6.Controls.Add(Me.CheckBox2) Me.Panel6.Controls.Add(Me.Label32) @@ -1802,7 +1790,7 @@ Partial Class Options Me.Panel6.Location = New System.Drawing.Point(0, 0) Me.Panel6.Margin = New System.Windows.Forms.Padding(0) Me.Panel6.Name = "Panel6" - Me.Panel6.Size = New System.Drawing.Size(728, 500) + Me.Panel6.Size = New System.Drawing.Size(728, 640) Me.Panel6.TabIndex = 0 ' 'LinkLabel4 @@ -1810,7 +1798,7 @@ Partial Class Options Me.LinkLabel4.AutoSize = True Me.LinkLabel4.LinkBehavior = System.Windows.Forms.LinkBehavior.NeverUnderline Me.LinkLabel4.LinkColor = System.Drawing.Color.DodgerBlue - Me.LinkLabel4.Location = New System.Drawing.Point(18, 468) + Me.LinkLabel4.Location = New System.Drawing.Point(18, 606) Me.LinkLabel4.Name = "LinkLabel4" Me.LinkLabel4.Size = New System.Drawing.Size(397, 15) Me.LinkLabel4.TabIndex = 12 @@ -1826,7 +1814,7 @@ Partial Class Options Me.TableLayoutPanel3.Controls.Add(Me.Label73, 1, 0) Me.TableLayoutPanel3.Controls.Add(Me.Label74, 0, 1) Me.TableLayoutPanel3.Controls.Add(Me.Label75, 1, 1) - Me.TableLayoutPanel3.Location = New System.Drawing.Point(48, 416) + Me.TableLayoutPanel3.Location = New System.Drawing.Point(48, 554) Me.TableLayoutPanel3.Name = "TableLayoutPanel3" Me.TableLayoutPanel3.RowCount = 2 Me.TableLayoutPanel3.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 50.0!)) @@ -1881,7 +1869,7 @@ Partial Class Options ' Me.ComboBox8.FormattingEnabled = True Me.ComboBox8.Items.AddRange(New Object() {"Display name only", "Display name, then friendly display name", "Friendly display name only"}) - Me.ComboBox8.Location = New System.Drawing.Point(20, 360) + Me.ComboBox8.Location = New System.Drawing.Point(20, 498) Me.ComboBox8.Name = "ComboBox8" Me.ComboBox8.Size = New System.Drawing.Size(686, 23) Me.ComboBox8.TabIndex = 10 @@ -1889,7 +1877,7 @@ Partial Class Options 'Label71 ' Me.Label71.AutoSize = True - Me.Label71.Location = New System.Drawing.Point(17, 392) + Me.Label71.Location = New System.Drawing.Point(17, 530) Me.Label71.Name = "Label71" Me.Label71.Size = New System.Drawing.Size(54, 15) Me.Label71.TabIndex = 9 @@ -1898,7 +1886,7 @@ Partial Class Options 'Label70 ' Me.Label70.AutoSize = True - Me.Label70.Location = New System.Drawing.Point(18, 338) + Me.Label70.Location = New System.Drawing.Point(18, 476) Me.Label70.Name = "Label70" Me.Label70.Size = New System.Drawing.Size(384, 15) Me.Label70.TabIndex = 9 @@ -1923,6 +1911,16 @@ Partial Class Options Me.CheckBox23.Text = "Map system accounts to application registration information" Me.CheckBox23.UseVisualStyleBackColor = True ' + 'CheckBox25 + ' + Me.CheckBox25.AutoSize = True + Me.CheckBox25.Location = New System.Drawing.Point(21, 308) + Me.CheckBox25.Name = "CheckBox25" + Me.CheckBox25.Size = New System.Drawing.Size(445, 19) + Me.CheckBox25.TabIndex = 13 + Me.CheckBox25.Text = "Lock unlocked BitLocker volumes when exiting offline installation management" + Me.CheckBox25.UseVisualStyleBackColor = True + ' 'CheckBox1 ' Me.CheckBox1.AutoSize = True @@ -1949,7 +1947,7 @@ Partial Class Options Me.Panel7.Controls.Add(Me.CheckBox14) Me.Panel7.Controls.Add(Me.Label48) Me.Panel7.Controls.Add(Me.TableLayoutPanel2) - Me.Panel7.Location = New System.Drawing.Point(0, 500) + Me.Panel7.Location = New System.Drawing.Point(0, 640) Me.Panel7.Margin = New System.Windows.Forms.Padding(0) Me.Panel7.Name = "Panel7" Me.Panel7.Size = New System.Drawing.Size(728, 172) @@ -1974,7 +1972,7 @@ Partial Class Options Me.Panel21.Controls.Add(Me.Label69) Me.Panel21.Controls.Add(Me.Label67) Me.Panel21.Controls.Add(Me.Label68) - Me.Panel21.Location = New System.Drawing.Point(0, 672) + Me.Panel21.Location = New System.Drawing.Point(0, 812) Me.Panel21.Margin = New System.Windows.Forms.Padding(0) Me.Panel21.Name = "Panel21" Me.Panel21.Size = New System.Drawing.Size(728, 256) @@ -2046,6 +2044,27 @@ Partial Class Options Me.Label68.TabIndex = 0 Me.Label68.Text = "If you want to learn more about an item online, you can leverage Web search. Choo" & _ "se the settings the program should consider for web searches:" + ' + 'Options_FileAssocs + ' + Me.Options_FileAssocs.Controls.Add(Me.FlowLayoutPanel10) + Me.Options_FileAssocs.Dock = System.Windows.Forms.DockStyle.Fill + Me.Options_FileAssocs.Location = New System.Drawing.Point(0, 0) + Me.Options_FileAssocs.Name = "Options_FileAssocs" + Me.Options_FileAssocs.Size = New System.Drawing.Size(748, 465) + Me.Options_FileAssocs.TabIndex = 8 + Me.Options_FileAssocs.Visible = False + ' + 'FlowLayoutPanel10 + ' + Me.FlowLayoutPanel10.AutoScroll = True + Me.FlowLayoutPanel10.Controls.Add(Me.Panel2) + Me.FlowLayoutPanel10.Controls.Add(Me.Panel3) + Me.FlowLayoutPanel10.Dock = System.Windows.Forms.DockStyle.Fill + Me.FlowLayoutPanel10.Location = New System.Drawing.Point(0, 0) + Me.FlowLayoutPanel10.Name = "FlowLayoutPanel10" + Me.FlowLayoutPanel10.Size = New System.Drawing.Size(748, 465) + Me.FlowLayoutPanel10.TabIndex = 0 ' 'Options_Shutdown ' @@ -2901,15 +2920,43 @@ Partial Class Options Me.ImageTaskHeader1.Size = New System.Drawing.Size(1008, 48) Me.ImageTaskHeader1.TabIndex = 6 ' - 'CheckBox25 + 'Label1 ' - Me.CheckBox25.AutoSize = True - Me.CheckBox25.Location = New System.Drawing.Point(21, 308) - Me.CheckBox25.Name = "CheckBox25" - Me.CheckBox25.Size = New System.Drawing.Size(445, 19) - Me.CheckBox25.TabIndex = 13 - Me.CheckBox25.Text = "Lock unlocked BitLocker volumes when exiting offline installation management" - Me.CheckBox25.UseVisualStyleBackColor = True + Me.Label1.AutoSize = True + Me.Label1.Location = New System.Drawing.Point(18, 341) + Me.Label1.Name = "Label1" + Me.Label1.Size = New System.Drawing.Size(444, 15) + Me.Label1.TabIndex = 9 + Me.Label1.Text = "When creating ISO files, allow me to create the following amount at the same time" & _ + ":" + ' + 'Label6 + ' + Me.Label6.AutoSize = True + Me.Label6.Location = New System.Drawing.Point(233, 373) + Me.Label6.Name = "Label6" + Me.Label6.Size = New System.Drawing.Size(185, 15) + Me.Label6.TabIndex = 14 + Me.Label6.Text = "Concurrent ISO file creation tasks:" + ' + 'NumericUpDown2 + ' + Me.NumericUpDown2.Location = New System.Drawing.Point(424, 371) + Me.NumericUpDown2.Maximum = New Decimal(New Integer() {10, 0, 0, 0}) + Me.NumericUpDown2.Minimum = New Decimal(New Integer() {1, 0, 0, 0}) + Me.NumericUpDown2.Name = "NumericUpDown2" + Me.NumericUpDown2.Size = New System.Drawing.Size(72, 23) + Me.NumericUpDown2.TabIndex = 15 + Me.NumericUpDown2.Value = New Decimal(New Integer() {1, 0, 0, 0}) + ' + 'Label35 + ' + Me.Label35.AutoEllipsis = True + Me.Label35.Location = New System.Drawing.Point(38, 401) + Me.Label35.Name = "Label35" + Me.Label35.Size = New System.Drawing.Size(666, 64) + Me.Label35.TabIndex = 9 + Me.Label35.Text = resources.GetString("Label35.Text") ' 'Options ' @@ -2988,8 +3035,6 @@ Partial Class Options Me.ShutdownSectionBtn.PerformLayout() CType(Me.PictureBox20, System.ComponentModel.ISupportInitialize).EndInit() Me.ValueContainer.ResumeLayout(False) - Me.Options_FileAssocs.ResumeLayout(False) - Me.FlowLayoutPanel10.ResumeLayout(False) Me.Options_ImgOps.ResumeLayout(False) Me.FlowLayoutPanel5.ResumeLayout(False) Me.Panel6.ResumeLayout(False) @@ -3000,6 +3045,8 @@ Partial Class Options Me.Panel7.PerformLayout() Me.Panel21.ResumeLayout(False) Me.Panel21.PerformLayout() + Me.Options_FileAssocs.ResumeLayout(False) + Me.FlowLayoutPanel10.ResumeLayout(False) Me.Options_Shutdown.ResumeLayout(False) Me.FlowLayoutPanel12.ResumeLayout(False) Me.Panel23.ResumeLayout(False) @@ -3055,6 +3102,7 @@ Partial Class Options Me.Panel11.ResumeLayout(False) Me.Panel11.PerformLayout() Me.Panel12.ResumeLayout(False) + CType(Me.NumericUpDown2, System.ComponentModel.ISupportInitialize).EndInit() Me.ResumeLayout(False) End Sub @@ -3294,5 +3342,9 @@ Partial Class Options Friend WithEvents CheckBox1 As System.Windows.Forms.CheckBox Friend WithEvents CheckBox24 As System.Windows.Forms.CheckBox Friend WithEvents CheckBox25 As System.Windows.Forms.CheckBox + Friend WithEvents NumericUpDown2 As System.Windows.Forms.NumericUpDown + Friend WithEvents Label6 As System.Windows.Forms.Label + Friend WithEvents Label35 As System.Windows.Forms.Label + Friend WithEvents Label1 As System.Windows.Forms.Label End Class diff --git a/Panels/Exe_Ops/Options.resx b/Panels/Exe_Ops/Options.resx index 89c4dfa9..e2ab2583 100644 --- a/Panels/Exe_Ops/Options.resx +++ b/Panels/Exe_Ops/Options.resx @@ -167,6 +167,11 @@ Package 1 of 128 233, 17 + + Note that, the more ISO files you create at the same time, the more CPU-intensive the task will get. Consider your machine's specifications before setting the slider. You must close and reopen the ISO creation task for your changes to be carried over. + +For the majority of systems, a value of 2 is fine. For more performant systems, you may increase this value. + This is only available when managing active installations. When getting information about AppX packages, DISMTools can map the IDs and names of the local accounts in this system to tell you which users an application is registered to more precisely. diff --git a/Panels/Exe_Ops/Options.vb b/Panels/Exe_Ops/Options.vb index 859f441c..d7b75fa4 100644 --- a/Panels/Exe_Ops/Options.vb +++ b/Panels/Exe_Ops/Options.vb @@ -221,6 +221,8 @@ Public Class Options MainForm.PreventSystemFromSleeping = CheckBox8.Checked MainForm.HumanizeDates = CheckBox1.Checked MainForm.LockUnlockedVolumes = CheckBox25.Checked + + MainForm.PEHelper_MaxConcurrentISO = NumericUpDown2.Value End Sub Private Sub GiveErrorExplanation(ErrorCode As Integer) @@ -1510,6 +1512,8 @@ Public Class Options LightThemesCB.ForeColor = CurrentTheme.ForegroundColor NumericUpDown1.BackColor = CurrentTheme.SectionBackgroundColor NumericUpDown1.ForeColor = CurrentTheme.ForegroundColor + NumericUpDown2.BackColor = CurrentTheme.SectionBackgroundColor + NumericUpDown2.ForeColor = CurrentTheme.ForegroundColor GroupBox1.ForeColor = CurrentTheme.ForegroundColor GroupBox2.ForeColor = CurrentTheme.ForegroundColor TrackBar1.BackColor = CurrentTheme.SectionBackgroundColor @@ -1671,6 +1675,8 @@ Public Class Options CheckBox8.Checked = MainForm.PreventSystemFromSleeping CheckBox1.Checked = MainForm.HumanizeDates CheckBox25.Checked = MainForm.LockUnlockedVolumes + + NumericUpDown2.Value = MainForm.PEHelper_MaxConcurrentISO End Sub Private Sub ComboBox5_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ComboBox5.SelectedIndexChanged diff --git a/Panels/ISOFiles/ISOCreator.vb b/Panels/ISOFiles/ISOCreator.vb index 7d49cf95..1c8792cc 100644 --- a/Panels/ISOFiles/ISOCreator.vb +++ b/Panels/ISOFiles/ISOCreator.vb @@ -18,7 +18,7 @@ Public Class ISOCreator Dim adkDownloadSuccess As Boolean ' Job manager for concurrent ISO creation tasks - Private Shared _jobManager As IsoCreationJobManager = New IsoCreationJobManager(maxConcurrentTasks:=5) + Private Shared _jobManager As IsoCreationJobManager = New IsoCreationJobManager(maxConcurrentTasks:=MainForm.PEHelper_MaxConcurrentISO) Private _currentJobId As Integer = -1 Private Sub ISOCreator_Load(sender As Object, e As EventArgs) Handles MyBase.Load @@ -403,6 +403,8 @@ Public Class ISOCreator DynaLog.LogMessage("- Copy to Ventoy? " & MainForm.PEHelper_CopyToVentoy) DynaLog.LogMessage("- Use new EFI boot binaries? " & MainForm.PEHelper_Use2023EFI) DynaLog.LogMessage("- Include System Drivers? " & MainForm.PEHelper_IncludeSysDrvs) + DynaLog.LogMessage("- " & MainForm.PEHelper_MaxConcurrentISO & " ISO file(s) can be created at the same time") + _jobManager = New IsoCreationJobManager(MainForm.PEHelper_MaxConcurrentISO) ' get build time to show on watermark Try diff --git a/settings.ini b/settings.ini index 3c772c41..8d2e8e43 100644 --- a/settings.ini +++ b/settings.ini @@ -36,6 +36,7 @@ AppxRemovalDisplayNameFormat=1 PreventSystemFromSleeping=1 HumanizeDates=1 LockUnlockedVolumes=1 +PEHelper.MaxConcurrentISO=2 [ScratchDir] UseScratch=0 From b75504d403886f4aeb1d552dc0ffe8050b686999 Mon Sep 17 00:00:00 2001 From: CodingWonders <101426328+CodingWonders@users.noreply.github.com> Date: Thu, 23 Jul 2026 21:54:06 +0200 Subject: [PATCH 14/48] [Enhance] Add auto-determination based on beefiness --- Panels/Exe_Ops/Options.Designer.vb | 17 +- Panels/Exe_Ops/Options.vb | 269 +++++++++++++++++++++++++++++ 2 files changed, 284 insertions(+), 2 deletions(-) diff --git a/Panels/Exe_Ops/Options.Designer.vb b/Panels/Exe_Ops/Options.Designer.vb index ae99c17c..79e56621 100644 --- a/Panels/Exe_Ops/Options.Designer.vb +++ b/Panels/Exe_Ops/Options.Designer.vb @@ -263,6 +263,7 @@ Partial Class Options Me.Label6 = New System.Windows.Forms.Label() Me.NumericUpDown2 = New System.Windows.Forms.NumericUpDown() Me.Label35 = New System.Windows.Forms.Label() + Me.Button8 = New System.Windows.Forms.Button() Me.TableLayoutPanel1.SuspendLayout() Me.Panel3.SuspendLayout() CType(Me.PictureBox8, System.ComponentModel.ISupportInitialize).BeginInit() @@ -1769,6 +1770,7 @@ Partial Class Options ' 'Panel6 ' + Me.Panel6.Controls.Add(Me.Button8) Me.Panel6.Controls.Add(Me.NumericUpDown2) Me.Panel6.Controls.Add(Me.Label6) Me.Panel6.Controls.Add(Me.LinkLabel4) @@ -2933,7 +2935,7 @@ Partial Class Options 'Label6 ' Me.Label6.AutoSize = True - Me.Label6.Location = New System.Drawing.Point(233, 373) + Me.Label6.Location = New System.Drawing.Point(151, 373) Me.Label6.Name = "Label6" Me.Label6.Size = New System.Drawing.Size(185, 15) Me.Label6.TabIndex = 14 @@ -2941,7 +2943,7 @@ Partial Class Options ' 'NumericUpDown2 ' - Me.NumericUpDown2.Location = New System.Drawing.Point(424, 371) + Me.NumericUpDown2.Location = New System.Drawing.Point(342, 371) Me.NumericUpDown2.Maximum = New Decimal(New Integer() {10, 0, 0, 0}) Me.NumericUpDown2.Minimum = New Decimal(New Integer() {1, 0, 0, 0}) Me.NumericUpDown2.Name = "NumericUpDown2" @@ -2958,6 +2960,16 @@ Partial Class Options Me.Label35.TabIndex = 9 Me.Label35.Text = resources.GetString("Label35.Text") ' + 'Button8 + ' + Me.Button8.FlatStyle = System.Windows.Forms.FlatStyle.System + Me.Button8.Location = New System.Drawing.Point(420, 371) + Me.Button8.Name = "Button8" + Me.Button8.Size = New System.Drawing.Size(158, 23) + Me.Button8.TabIndex = 16 + Me.Button8.Text = "Determine..." + Me.Button8.UseVisualStyleBackColor = True + ' 'Options ' Me.AcceptButton = Me.OK_Button @@ -3346,5 +3358,6 @@ Partial Class Options Friend WithEvents Label6 As System.Windows.Forms.Label Friend WithEvents Label35 As System.Windows.Forms.Label Friend WithEvents Label1 As System.Windows.Forms.Label + Friend WithEvents Button8 As System.Windows.Forms.Button End Class diff --git a/Panels/Exe_Ops/Options.vb b/Panels/Exe_Ops/Options.vb index d7b75fa4..3973c2ba 100644 --- a/Panels/Exe_Ops/Options.vb +++ b/Panels/Exe_Ops/Options.vb @@ -19,6 +19,251 @@ Public Class Options Private AutoReloadServiceInstalled As Boolean Private AutoReloadService As WindowsService + Private Class ProcessorFamilyCategory + + Public Property Beefiness As ProcessorFamilyBeefiness + Public Property Family As Integer + + Public Sub New(family As Integer, beefiness As ProcessorFamilyBeefiness) + Me.Family = family + Me.Beefiness = beefiness + End Sub + + End Class + + Private Enum ProcessorFamilyBeefiness As Integer + Potato = 0 + Average = 1 + Beefy = 2 + End Enum + + ' Processor families that we know the performance of. Family numbers derive from + ' version 3.9 of the SMBIOS specification, from 2025: + ' https://www.dmtf.org/sites/default/files/standards/documents/DSP0134_3.9.0.pdf + Private Const CPU_INTEL_CORE_DUO As Integer = 40, + CPU_INTEL_CORE_DUO_M As Integer = 41, + CPU_INTEL_CORE_SOLO As Integer = 42, + CPU_INTEL_ATOM As Integer = 43, + CPU_INTEL_CORE_M As Integer = 44, + CPU_INTEL_CORE_M3 As Integer = 45, + CPU_INTEL_CORE_M5 As Integer = 46, + CPU_INTEL_CORE_M7 As Integer = 47, + CPU_AMD_TURION_2_ULTRA_DUALCORE_MOBILE_M As Integer = 56, + CPU_AMD_TURION_2_DUALCORE_MOBILE_M As Integer = 57, + CPU_AMD_ATHLON_2_DUALCORE_M As Integer = 58, + CPU_AMD_OPTERON_6100 As Integer = 59, + CPU_AMD_OPTERON_4100 As Integer = 60, + CPU_AMD_OPTERON_6200 As Integer = 61, + CPU_AMD_OPTERON_4200 As Integer = 62, + CPU_AMD_FX As Integer = 63, + CPU_AMD_C As Integer = 70, + CPU_AMD_E As Integer = 71, + CPU_AMD_A As Integer = 72, + CPU_AMD_G As Integer = 73, + CPU_AMD_Z As Integer = 74, + CPU_AMD_R As Integer = 75, + CPU_AMD_OPTERON_4300 As Integer = 76, + CPU_AMD_OPTERON_6300 As Integer = 77, + CPU_AMD_OPTERON_3300 As Integer = 78, + CPU_AMD_FIREPRO As Integer = 79, + CPU_AMD_ATHLON_X4_QUADCORE As Integer = 102, + CPU_AMD_OPTERON_X1000 As Integer = 103, + CPU_AMD_OPTERON_X2000_APU As Integer = 104, + CPU_AMD_OPTERON_A As Integer = 105, + CPU_AMD_OPTERON_X3000_APU As Integer = 106, + CPU_AMD_ZEN As Integer = 107, + CPU_AMD_ATHLON_64 As Integer = 131, + CPU_AMD_OPTERON As Integer = 132, + CPU_AMD_SEMPRON As Integer = 133, + CPU_AMD_TURION_64_MOBILE As Integer = 134, + CPU_AMD_OPTERON_DUALCORE As Integer = 135, + CPU_AMD_ATHLON_64_X2_DUALCORE As Integer = 136, + CPU_AMD_TURION_64_X2_MOBILE As Integer = 137, + CPU_AMD_OPTERON_QUADCORE As Integer = 138, + CPU_AMD_OPTERON_MK3 As Integer = 139, + CPU_AMD_PHENOM_FX_QUADCORE As Integer = 140, + CPU_AMD_PHENOM_X4_QUADCORE As Integer = 141, + CPU_AMD_PHENOM_X2_DUALCORE As Integer = 142, + CPU_AMD_ATHLON_X2_DUALCORE As Integer = 143, + CPU_INTEL_XEON_3200_QUADCORE As Integer = 161, + CPU_INTEL_XEON_3000_DUALCORE As Integer = 162, + CPU_INTEL_XEON_5300_QUADCORE As Integer = 163, + CPU_INTEL_XEON_5100_DUALCORE As Integer = 164, + CPU_INTEL_XEON_5000_DUALCORE As Integer = 165, + CPU_INTEL_XEON_LV_DUALCORE As Integer = 166, + CPU_INTEL_XEON_ULV_DUALCORE As Integer = 167, + CPU_INTEL_XEON_7100_DUALCORE As Integer = 168, + CPU_INTEL_XEON_5400_QUADCORE As Integer = 169, + CPU_INTEL_XEON_QUADCORE As Integer = 170, + CPU_INTEL_XEON_5200_DUALCORE As Integer = 171, + CPU_INTEL_XEON_7200_DUALCORE As Integer = 172, + CPU_INTEL_XEON_7300_QUADCORE As Integer = 173, + CPU_INTEL_XEON_7400_QUADCORE As Integer = 174, + CPU_INTEL_XEON_7400_MULTICORE As Integer = 175, + CPU_INTEL_PENTIUM3_XEON As Integer = 176, + CPU_INTEL_PENTIUM3_SPEEDSTEP As Integer = 177, + CPU_INTEL_PENTIUM4 As Integer = 178, + CPU_INTEL_XEON As Integer = 179, + CPU_INTEL_XEON_MP As Integer = 181, + CPU_AMD_ATHLON_XP As Integer = 182, + CPU_AMD_ATHLON_MP As Integer = 183, + CPU_INTEL_PENTIUM_M As Integer = 185, + CPU_INTEL_CELERON_D As Integer = 186, + CPU_INTEL_PENTIUM_D As Integer = 187, + CPU_INTEL_PENTIUM_D_EXTREME As Integer = 188, + CPU_INTEL_CORE_SOLO_2 As Integer = 189, + CPU_INTEL_CORE2_DUO As Integer = 191, + CPU_INTEL_CORE2_SOLO As Integer = 192, + CPU_INTEL_CORE2_EXTREME As Integer = 193, + CPU_INTEL_CORE2_QUAD As Integer = 194, + CPU_INTEL_CORE2_EXTREME_M As Integer = 195, + CPU_INTEL_CORE2_DUO_M As Integer = 196, + CPU_INTEL_CORE2_SOLO_M As Integer = 197, + CPU_INTEL_CORE_I7 As Integer = 198, + CPU_INTEL_CELERON_DUALCORE As Integer = 199, + CPU_INTEL_CORE_I5 As Integer = 205, + CPU_INTEL_CORE_I3 As Integer = 206, + CPU_INTEL_CORE_I9 As Integer = 207, + CPU_INTEL_XEON_D As Integer = 208, + CPU_INTEL_XEON_3400_MULTICORE As Integer = 224, + CPU_AMD_OPTERON_3000 As Integer = 228, + CPU_AMD_SEMPRON_2 As Integer = 229, + CPU_AMD_OPTERON_QUADCORE_EMBEDDED As Integer = 230, + CPU_AMD_PHENOM_TRICORE As Integer = 231, + CPU_AMD_TURION_ULTRA_DUALCORE_MOBILE As Integer = 232, + CPU_AMD_TURION_DUALCORE_MOBILE As Integer = 233, + CPU_AMD_ATHLON_DUALCORE As Integer = 234, + CPU_AMD_SEMPRON_SI As Integer = 235, + CPU_AMD_PHENOM_2 As Integer = 236, + CPU_AMD_ATHLON_2 As Integer = 237, + CPU_AMD_OPTERON_SIXCORE As Integer = 238, + CPU_AMD_SEMPRON_M As Integer = 239, + CPU_ARMV7 As Integer = 256, + CPU_ARMV8 As Integer = 257, + CPU_ARMV9 As Integer = 258, + CPU_ARMRESERVED As Integer = 259, + CPU_INTEL_CORE_3_RAPTORLAKE As Integer = 768, + CPU_INTEL_CORE_5_RAPTORLAKE As Integer = 769, + CPU_INTEL_CORE_7_RAPTORLAKE As Integer = 770, + CPU_INTEL_CORE_9_RAPTORLAKE As Integer = 771, + CPU_INTEL_CORE_ULTRA3 As Integer = 772, + CPU_INTEL_CORE_ULTRA5 As Integer = 773, + CPU_INTEL_CORE_ULTRA7 As Integer = 774, + CPU_INTEL_CORE_ULTRA9 As Integer = 775 + + Private SpecialProcessorFamilies As New List(Of ProcessorFamilyCategory) From { + New ProcessorFamilyCategory(CPU_INTEL_CORE_DUO, ProcessorFamilyBeefiness.Potato), + New ProcessorFamilyCategory(CPU_INTEL_CORE_DUO_M, ProcessorFamilyBeefiness.Potato), + New ProcessorFamilyCategory(CPU_INTEL_CORE_SOLO, ProcessorFamilyBeefiness.Potato), + New ProcessorFamilyCategory(CPU_INTEL_ATOM, ProcessorFamilyBeefiness.Potato), + New ProcessorFamilyCategory(CPU_INTEL_CORE_M, ProcessorFamilyBeefiness.Potato), + New ProcessorFamilyCategory(CPU_INTEL_CORE_M3, ProcessorFamilyBeefiness.Potato), + New ProcessorFamilyCategory(CPU_INTEL_CORE_M5, ProcessorFamilyBeefiness.Potato), + New ProcessorFamilyCategory(CPU_INTEL_CORE_M7, ProcessorFamilyBeefiness.Average), + New ProcessorFamilyCategory(CPU_AMD_TURION_2_ULTRA_DUALCORE_MOBILE_M, ProcessorFamilyBeefiness.Potato), + New ProcessorFamilyCategory(CPU_AMD_TURION_2_DUALCORE_MOBILE_M, ProcessorFamilyBeefiness.Potato), + New ProcessorFamilyCategory(CPU_AMD_ATHLON_2_DUALCORE_M, ProcessorFamilyBeefiness.Potato), + New ProcessorFamilyCategory(CPU_AMD_OPTERON_6100, ProcessorFamilyBeefiness.Average), + New ProcessorFamilyCategory(CPU_AMD_OPTERON_4100, ProcessorFamilyBeefiness.Average), + New ProcessorFamilyCategory(CPU_AMD_OPTERON_6200, ProcessorFamilyBeefiness.Average), + New ProcessorFamilyCategory(CPU_AMD_OPTERON_4200, ProcessorFamilyBeefiness.Average), + New ProcessorFamilyCategory(CPU_AMD_FX, ProcessorFamilyBeefiness.Average), + New ProcessorFamilyCategory(CPU_AMD_C, ProcessorFamilyBeefiness.Potato), + New ProcessorFamilyCategory(CPU_AMD_E, ProcessorFamilyBeefiness.Potato), + New ProcessorFamilyCategory(CPU_AMD_A, ProcessorFamilyBeefiness.Average), + New ProcessorFamilyCategory(CPU_AMD_G, ProcessorFamilyBeefiness.Potato), + New ProcessorFamilyCategory(CPU_AMD_Z, ProcessorFamilyBeefiness.Potato), + New ProcessorFamilyCategory(CPU_AMD_R, ProcessorFamilyBeefiness.Average), + New ProcessorFamilyCategory(CPU_AMD_OPTERON_4300, ProcessorFamilyBeefiness.Average), + New ProcessorFamilyCategory(CPU_AMD_OPTERON_6300, ProcessorFamilyBeefiness.Average), + New ProcessorFamilyCategory(CPU_AMD_OPTERON_3300, ProcessorFamilyBeefiness.Average), + New ProcessorFamilyCategory(CPU_AMD_FIREPRO, ProcessorFamilyBeefiness.Average), + New ProcessorFamilyCategory(CPU_AMD_ATHLON_X4_QUADCORE, ProcessorFamilyBeefiness.Average), + New ProcessorFamilyCategory(CPU_AMD_OPTERON_X1000, ProcessorFamilyBeefiness.Potato), + New ProcessorFamilyCategory(CPU_AMD_OPTERON_X2000_APU, ProcessorFamilyBeefiness.Potato), + New ProcessorFamilyCategory(CPU_AMD_OPTERON_A, ProcessorFamilyBeefiness.Average), + New ProcessorFamilyCategory(CPU_AMD_OPTERON_X3000_APU, ProcessorFamilyBeefiness.Potato), + New ProcessorFamilyCategory(CPU_AMD_ZEN, ProcessorFamilyBeefiness.Beefy), + New ProcessorFamilyCategory(CPU_AMD_ATHLON_64, ProcessorFamilyBeefiness.Average), + New ProcessorFamilyCategory(CPU_AMD_OPTERON, ProcessorFamilyBeefiness.Average), + New ProcessorFamilyCategory(CPU_AMD_SEMPRON, ProcessorFamilyBeefiness.Potato), + New ProcessorFamilyCategory(CPU_AMD_TURION_64_MOBILE, ProcessorFamilyBeefiness.Potato), + New ProcessorFamilyCategory(CPU_AMD_OPTERON_DUALCORE, ProcessorFamilyBeefiness.Average), + New ProcessorFamilyCategory(CPU_AMD_ATHLON_64_X2_DUALCORE, ProcessorFamilyBeefiness.Average), + New ProcessorFamilyCategory(CPU_AMD_TURION_64_X2_MOBILE, ProcessorFamilyBeefiness.Potato), + New ProcessorFamilyCategory(CPU_AMD_OPTERON_QUADCORE, ProcessorFamilyBeefiness.Average), + New ProcessorFamilyCategory(CPU_AMD_OPTERON_MK3, ProcessorFamilyBeefiness.Average), + New ProcessorFamilyCategory(CPU_AMD_PHENOM_FX_QUADCORE, ProcessorFamilyBeefiness.Beefy), + New ProcessorFamilyCategory(CPU_AMD_PHENOM_X4_QUADCORE, ProcessorFamilyBeefiness.Average), + New ProcessorFamilyCategory(CPU_AMD_PHENOM_X2_DUALCORE, ProcessorFamilyBeefiness.Average), + New ProcessorFamilyCategory(CPU_AMD_ATHLON_X2_DUALCORE, ProcessorFamilyBeefiness.Potato), + New ProcessorFamilyCategory(CPU_INTEL_XEON_3200_QUADCORE, ProcessorFamilyBeefiness.Average), + New ProcessorFamilyCategory(CPU_INTEL_XEON_3000_DUALCORE, ProcessorFamilyBeefiness.Average), + New ProcessorFamilyCategory(CPU_INTEL_XEON_5300_QUADCORE, ProcessorFamilyBeefiness.Average), + New ProcessorFamilyCategory(CPU_INTEL_XEON_5100_DUALCORE, ProcessorFamilyBeefiness.Average), + New ProcessorFamilyCategory(CPU_INTEL_XEON_5000_DUALCORE, ProcessorFamilyBeefiness.Average), + New ProcessorFamilyCategory(CPU_INTEL_XEON_LV_DUALCORE, ProcessorFamilyBeefiness.Potato), + New ProcessorFamilyCategory(CPU_INTEL_XEON_ULV_DUALCORE, ProcessorFamilyBeefiness.Potato), + New ProcessorFamilyCategory(CPU_INTEL_XEON_7100_DUALCORE, ProcessorFamilyBeefiness.Average), + New ProcessorFamilyCategory(CPU_INTEL_XEON_5400_QUADCORE, ProcessorFamilyBeefiness.Average), + New ProcessorFamilyCategory(CPU_INTEL_XEON_QUADCORE, ProcessorFamilyBeefiness.Average), + New ProcessorFamilyCategory(CPU_INTEL_XEON_5200_DUALCORE, ProcessorFamilyBeefiness.Average), + New ProcessorFamilyCategory(CPU_INTEL_XEON_7200_DUALCORE, ProcessorFamilyBeefiness.Average), + New ProcessorFamilyCategory(CPU_INTEL_XEON_7300_QUADCORE, ProcessorFamilyBeefiness.Beefy), + New ProcessorFamilyCategory(CPU_INTEL_XEON_7400_QUADCORE, ProcessorFamilyBeefiness.Beefy), + New ProcessorFamilyCategory(CPU_INTEL_XEON_7400_MULTICORE, ProcessorFamilyBeefiness.Beefy), + New ProcessorFamilyCategory(CPU_INTEL_PENTIUM3_XEON, ProcessorFamilyBeefiness.Potato), + New ProcessorFamilyCategory(CPU_INTEL_PENTIUM3_SPEEDSTEP, ProcessorFamilyBeefiness.Potato), + New ProcessorFamilyCategory(CPU_INTEL_PENTIUM4, ProcessorFamilyBeefiness.Average), + New ProcessorFamilyCategory(CPU_INTEL_XEON, ProcessorFamilyBeefiness.Average), + New ProcessorFamilyCategory(CPU_INTEL_XEON_MP, ProcessorFamilyBeefiness.Beefy), + New ProcessorFamilyCategory(CPU_AMD_ATHLON_XP, ProcessorFamilyBeefiness.Average), + New ProcessorFamilyCategory(CPU_AMD_ATHLON_MP, ProcessorFamilyBeefiness.Average), + New ProcessorFamilyCategory(CPU_INTEL_PENTIUM_M, ProcessorFamilyBeefiness.Potato), + New ProcessorFamilyCategory(CPU_INTEL_CELERON_D, ProcessorFamilyBeefiness.Potato), + New ProcessorFamilyCategory(CPU_INTEL_PENTIUM_D, ProcessorFamilyBeefiness.Average), + New ProcessorFamilyCategory(CPU_INTEL_PENTIUM_D_EXTREME, ProcessorFamilyBeefiness.Beefy), + New ProcessorFamilyCategory(CPU_INTEL_CORE_SOLO_2, ProcessorFamilyBeefiness.Potato), + New ProcessorFamilyCategory(CPU_INTEL_CORE2_DUO, ProcessorFamilyBeefiness.Average), + New ProcessorFamilyCategory(CPU_INTEL_CORE2_SOLO, ProcessorFamilyBeefiness.Potato), + New ProcessorFamilyCategory(CPU_INTEL_CORE2_EXTREME, ProcessorFamilyBeefiness.Beefy), + New ProcessorFamilyCategory(CPU_INTEL_CORE2_QUAD, ProcessorFamilyBeefiness.Average), + New ProcessorFamilyCategory(CPU_INTEL_CORE2_EXTREME_M, ProcessorFamilyBeefiness.Beefy), + New ProcessorFamilyCategory(CPU_INTEL_CORE2_DUO_M, ProcessorFamilyBeefiness.Potato), + New ProcessorFamilyCategory(CPU_INTEL_CORE2_SOLO_M, ProcessorFamilyBeefiness.Potato), + New ProcessorFamilyCategory(CPU_INTEL_CORE_I7, ProcessorFamilyBeefiness.Beefy), + New ProcessorFamilyCategory(CPU_INTEL_CELERON_DUALCORE, ProcessorFamilyBeefiness.Potato), + New ProcessorFamilyCategory(CPU_INTEL_CORE_I5, ProcessorFamilyBeefiness.Average), + New ProcessorFamilyCategory(CPU_INTEL_CORE_I3, ProcessorFamilyBeefiness.Potato), + New ProcessorFamilyCategory(CPU_INTEL_CORE_I9, ProcessorFamilyBeefiness.Beefy), + New ProcessorFamilyCategory(CPU_INTEL_XEON_D, ProcessorFamilyBeefiness.Average), + New ProcessorFamilyCategory(CPU_INTEL_XEON_3400_MULTICORE, ProcessorFamilyBeefiness.Average), + New ProcessorFamilyCategory(CPU_AMD_OPTERON_3000, ProcessorFamilyBeefiness.Average), + New ProcessorFamilyCategory(CPU_AMD_SEMPRON_2, ProcessorFamilyBeefiness.Potato), + New ProcessorFamilyCategory(CPU_AMD_OPTERON_QUADCORE_EMBEDDED, ProcessorFamilyBeefiness.Potato), + New ProcessorFamilyCategory(CPU_AMD_PHENOM_TRICORE, ProcessorFamilyBeefiness.Average), + New ProcessorFamilyCategory(CPU_AMD_TURION_ULTRA_DUALCORE_MOBILE, ProcessorFamilyBeefiness.Potato), + New ProcessorFamilyCategory(CPU_AMD_TURION_DUALCORE_MOBILE, ProcessorFamilyBeefiness.Potato), + New ProcessorFamilyCategory(CPU_AMD_ATHLON_DUALCORE, ProcessorFamilyBeefiness.Average), + New ProcessorFamilyCategory(CPU_AMD_SEMPRON_SI, ProcessorFamilyBeefiness.Potato), + New ProcessorFamilyCategory(CPU_AMD_PHENOM_2, ProcessorFamilyBeefiness.Average), + New ProcessorFamilyCategory(CPU_AMD_ATHLON_2, ProcessorFamilyBeefiness.Average), + New ProcessorFamilyCategory(CPU_AMD_OPTERON_SIXCORE, ProcessorFamilyBeefiness.Beefy), + New ProcessorFamilyCategory(CPU_AMD_SEMPRON_M, ProcessorFamilyBeefiness.Potato), + New ProcessorFamilyCategory(CPU_ARMV7, ProcessorFamilyBeefiness.Potato), + New ProcessorFamilyCategory(CPU_ARMV8, ProcessorFamilyBeefiness.Average), + New ProcessorFamilyCategory(CPU_ARMV9, ProcessorFamilyBeefiness.Beefy), + New ProcessorFamilyCategory(CPU_ARMRESERVED, ProcessorFamilyBeefiness.Average), + New ProcessorFamilyCategory(CPU_INTEL_CORE_3_RAPTORLAKE, ProcessorFamilyBeefiness.Average), + New ProcessorFamilyCategory(CPU_INTEL_CORE_5_RAPTORLAKE, ProcessorFamilyBeefiness.Average), + New ProcessorFamilyCategory(CPU_INTEL_CORE_7_RAPTORLAKE, ProcessorFamilyBeefiness.Beefy), + New ProcessorFamilyCategory(CPU_INTEL_CORE_9_RAPTORLAKE, ProcessorFamilyBeefiness.Beefy), + New ProcessorFamilyCategory(CPU_INTEL_CORE_ULTRA3, ProcessorFamilyBeefiness.Average), + New ProcessorFamilyCategory(CPU_INTEL_CORE_ULTRA5, ProcessorFamilyBeefiness.Average), + New ProcessorFamilyCategory(CPU_INTEL_CORE_ULTRA7, ProcessorFamilyBeefiness.Beefy), + New ProcessorFamilyCategory(CPU_INTEL_CORE_ULTRA9, ProcessorFamilyBeefiness.Beefy) + } + Private Sub DetermineSettingValidity() DynaLog.LogMessage("Validating settings...") If TextBox1.Text = "" Then @@ -2729,4 +2974,28 @@ Public Class Options Private Sub DTProjAssocCB_CheckedChanged(sender As Object, e As EventArgs) Handles DTProjAssocCB.CheckedChanged CheckBox11.Enabled = DTProjAssocCB.Checked End Sub + + Private Sub Button8_Click(sender As Object, e As EventArgs) Handles Button8.Click + ' Compare by processor family + Try + Dim processorFamilyMOC As ManagementObjectCollection = WMIHelper.GetResultsFromManagementQuery("SELECT Family FROM Win32_Processor") + If processorFamilyMOC IsNot Nothing Then + Dim processorFamily As Integer = WMIHelper.GetObjectValue(processorFamilyMOC(0), "Family") + Dim processorDetails As ProcessorFamilyCategory = SpecialProcessorFamilies.FirstOrDefault(Function(procFamily) procFamily.Family = processorFamily) + + If processorDetails IsNot Nothing Then + Select Case processorDetails.Beefiness + Case ProcessorFamilyBeefiness.Potato : NumericUpDown2.Value = 2 + Case ProcessorFamilyBeefiness.Average : NumericUpDown2.Value = 5 + Case ProcessorFamilyBeefiness.Beefy : NumericUpDown2.Value = 10 + End Select + + MessageBox.Show(String.Format("Based on your processor's specifications, the program has been configured to support up to {1} concurrent ISO creation tasks.{0}{0}" & + "Apart from your processor, consider other specifications in your system that may become bottlenecks, such as disk I/O, or memory bandwidth.", Environment.NewLine, NumericUpDown2.Value), ImageTaskHeader1.ItemText, MessageBoxButtons.OK, MessageBoxIcon.Information) + End If + End If + Catch ex As Exception + + End Try + End Sub End Class From 26f6a62db41b55946eee165661c7af7517aaf8cc Mon Sep 17 00:00:00 2001 From: CodingWonders <101426328+CodingWonders@users.noreply.github.com> Date: Thu, 23 Jul 2026 22:54:39 +0200 Subject: [PATCH 15/48] [Enhance] Only set unique items --- Panels/Img_Ops/Drivers/ExportDrivers.vb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Panels/Img_Ops/Drivers/ExportDrivers.vb b/Panels/Img_Ops/Drivers/ExportDrivers.vb index 5a935088..f8b265fd 100644 --- a/Panels/Img_Ops/Drivers/ExportDrivers.vb +++ b/Panels/Img_Ops/Drivers/ExportDrivers.vb @@ -110,7 +110,7 @@ Public Class ExportDrivers Exit Sub End If ProgressPanel.drvExportAllDrvs = RadioButton1.Checked - ProgressPanel.drvExportSpecificClassNames = SelectedClassNamesLB.Items.Cast(Of String)().ToArray() + ProgressPanel.drvExportSpecificClassNames = SelectedClassNamesLB.Items.Cast(Of String)().Distinct().ToArray() ProgressPanel.drvExportOrganizeClassNameExports = CheckBox1.Checked ProgressPanel.OperationNum = 77 ' Windows 7 behaves differently from Windows 8 and later when getting drivers. From 08ab41379b8fec527af63945b0bd2fbbc7d34b7e Mon Sep 17 00:00:00 2001 From: CodingWonders <101426328+CodingWonders@users.noreply.github.com> Date: Fri, 24 Jul 2026 19:26:07 +0200 Subject: [PATCH 16/48] [Fix] HiDPI --- Panels/Get_Ops/Drivers/GetDriverInfo.Designer.vb | 4 ++++ Panels/Get_Ops/Pkgs/GetPkgInfo.Designer.vb | 4 ++++ 2 files changed, 8 insertions(+) diff --git a/Panels/Get_Ops/Drivers/GetDriverInfo.Designer.vb b/Panels/Get_Ops/Drivers/GetDriverInfo.Designer.vb index da6a47b8..0e61cbd7 100644 --- a/Panels/Get_Ops/Drivers/GetDriverInfo.Designer.vb +++ b/Panels/Get_Ops/Drivers/GetDriverInfo.Designer.vb @@ -1198,6 +1198,8 @@ Partial Class GetDriverInfo ' 'Label4 ' + Me.Label4.Anchor = CType(((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Left) _ + Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) Me.Label4.AutoEllipsis = True Me.Label4.Location = New System.Drawing.Point(129, 231) Me.Label4.Name = "Label4" @@ -1208,6 +1210,8 @@ Partial Class GetDriverInfo ' 'Label3 ' + Me.Label3.Anchor = CType(((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Left) _ + Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) Me.Label3.AutoEllipsis = True Me.Label3.Location = New System.Drawing.Point(129, 93) Me.Label3.Name = "Label3" diff --git a/Panels/Get_Ops/Pkgs/GetPkgInfo.Designer.vb b/Panels/Get_Ops/Pkgs/GetPkgInfo.Designer.vb index 3d627fbc..dd58b6d7 100644 --- a/Panels/Get_Ops/Pkgs/GetPkgInfo.Designer.vb +++ b/Panels/Get_Ops/Pkgs/GetPkgInfo.Designer.vb @@ -214,6 +214,8 @@ Partial Class GetPkgInfoDlg ' 'Label4 ' + Me.Label4.Anchor = CType(((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Left) _ + Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) Me.Label4.AutoEllipsis = True Me.Label4.Location = New System.Drawing.Point(129, 231) Me.Label4.Name = "Label4" @@ -224,6 +226,8 @@ Partial Class GetPkgInfoDlg ' 'Label3 ' + Me.Label3.Anchor = CType(((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Left) _ + Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) Me.Label3.AutoEllipsis = True Me.Label3.Location = New System.Drawing.Point(129, 93) Me.Label3.Name = "Label3" From 429d139234740dfa8960728a5dd0ed5b900c0bf8 Mon Sep 17 00:00:00 2001 From: CodingWonders <101426328+CodingWonders@users.noreply.github.com> Date: Fri, 24 Jul 2026 22:18:52 +0200 Subject: [PATCH 17/48] [Unattended answer file/SSE] Disable match tester on null expression --- .../CustomRuleDetailsDialog.Designer.vb | 1 + .../CustomRules/CustomRuleDetailsDialog.vb | 1 + .../out/StarterScriptEditor-NET20-src.zip | Bin 334754 -> 334768 bytes .../out/StarterScriptEditor-NET20.exe | Bin 487424 -> 487424 bytes .../out/StarterScriptEditor.exe | Bin 429056 -> 429056 bytes 5 files changed, 2 insertions(+) diff --git a/Tools/StarterScriptEditor/CustomRules/CustomRuleDetailsDialog.Designer.vb b/Tools/StarterScriptEditor/CustomRules/CustomRuleDetailsDialog.Designer.vb index 1c1f0910..7c5c2fc8 100644 --- a/Tools/StarterScriptEditor/CustomRules/CustomRuleDetailsDialog.Designer.vb +++ b/Tools/StarterScriptEditor/CustomRules/CustomRuleDetailsDialog.Designer.vb @@ -188,6 +188,7 @@ Partial Class CustomRuleDetailsDialog ' 'RegexTesterButton ' + Me.RegexTesterButton.Enabled = False Me.RegexTesterButton.FlatStyle = System.Windows.Forms.FlatStyle.System Me.RegexTesterButton.Location = New System.Drawing.Point(23, 247) Me.RegexTesterButton.Name = "RegexTesterButton" diff --git a/Tools/StarterScriptEditor/CustomRules/CustomRuleDetailsDialog.vb b/Tools/StarterScriptEditor/CustomRules/CustomRuleDetailsDialog.vb index 1591e3cc..c54619a8 100644 --- a/Tools/StarterScriptEditor/CustomRules/CustomRuleDetailsDialog.vb +++ b/Tools/StarterScriptEditor/CustomRules/CustomRuleDetailsDialog.vb @@ -88,6 +88,7 @@ Public Class CustomRuleDetailsDialog Private Sub RuleExpressionTextBox_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RuleExpressionTextBox.TextChanged If CurrentCustomRule IsNot Nothing Then CurrentCustomRule.RuleExpression = RuleExpressionTextBox.Text + RegexTesterButton.Enabled = RuleExpressionTextBox.Text <> "" End Sub Private Sub ComboBox2_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ComboBox2.SelectedIndexChanged diff --git a/Tools/StarterScriptEditor/out/StarterScriptEditor-NET20-src.zip b/Tools/StarterScriptEditor/out/StarterScriptEditor-NET20-src.zip index bf2f33cfcc873e6bd80a62e70aecacca1afc779c..446cd6b78b23b3d18aa3a618ed0af80e20a6279b 100644 GIT binary patch delta 6158 zcmZWt2Rv2p|G(?pY}d#pA}gz`ii|5Wu9>~pwOu14;~I(VGLDRpY{`leN;YL?RYbD0 zLWuOgG=AS+|MNQMbw1DM{rP;(^Land=Q+>oc~D1NLAX2I;lhu1le*nGkKWbm?r`L> zV%?pwn$o8geyknwZ-5;ODS>Y(j|G=lkcQl+eAjfmGJga|0)ae9Lgie*ySfjFpbq0( z@gjSW(wpdvCRd_FL;noR5QoqN-m4nUDl>O4$jKl0_IfPMwZ&(7N0HQu2d@Uo$jZFO z&Npu+n(yTXsD`C+Z;5)zCUR}Jc*$~vO66q;5_?E@Z1_@7wFZUJR7K+sSXwBvr)O2y zsJ?q|wwuV>w^9xWY$YM^Zw7A;ym>CxswuLmnkF53zP{cc-aLQWcqXj^@y3_9g?Web zcIuY$Cz-qrrGo~41@^Ud;i%va5B1aw@>lP=IEGQ>@e);@%Jq&JW6Fb+J*0|fAW?l~ z%5lJMKzZ%)>2wil-16hWVUmu=j$1O#8?izj_Ae6sn00T#9cXTFmf|xD4Hj+}efu1^ z(@g2bsZxVZpz+4=Nj^M5^0n{uBx{rHn;)jMw^I{ZZn6nr`W3&XpGW*0WvMWnaS+Du zvP`W`rkOKtiy5OeBC&lcpChf>l6zRU_*3~G8kvsDCpe%FBc$YfI;0K+&z#$xcLMh= zuU$;OK6IZkz~b(jT!J-T;ZzS>_R1-9^og6RZLvx(sS{Jg8-uI;Ze&Zrg9@xv@VHSI z8>T5cCYvkNwC^)K=fiR#ot_Z`w}iT|FdaVkTJwHIUN8u)edQkN1IH_pyHJLN^}8ZW zCR%R2>pqq7j`hZCe7-ncrRtcdb&e~+R*Tuz!WP!P(-slCDKGNyd;!bK7g%y47sL;9 zSyaSvszVuIcCT)`!`p}Q>}sB(vLv`Mjc+OVVV5eoWLrNX{}uOj*iYN}Eo>5wqS#>Z z$zy6iRI6xDwSdJSI&LH9>I+< z-`5{MdYWdR9~~MIZ6LPJSWGd+Q`t9)Sv66!6hD`aS$!~IX*<}4HSM2ytHu&OCH38= zFC&!EX~+h$e*!j*SjF|DND8&tImeZ zPBqe`L8-Z7(G(B^+R|;qN=H9>@&G6QF7~}vZMeqebNA573r@w? zE?tXKRLStWG;4<+?#a*FHKz2qy6T*HZMq-*4nr9K4z`k4Z}Ga-V5t z*p+Z7d%7V1I8-^m>bu17YtFu2gO_>QFA7n@o1I>?s3cj8rnvN1GU>0~()?d4G8Xhg zj4Db(+%(FkYp{8E_ci(Jl{R?~&d!jO7*o5CsWjx?^HY$Lg>7&T-A6a5H{|ApqKr90hH^LLo|I{RfHk{JtjjCG?Na49f+ZuvGi{uiIloh4^cBXGB^dc}Z-4~r{7KTl z0tX4u-g@t^h`-=_$BUS;!@K3@4JfnByk=k7Xvx|xLt3l=zGmgQ&b5WKw&ztZN{Yso z6-d3?LmT(Sf`o?<^%NiB{8ADcU&}_7Qn7C?b?Oh=)mlefF?#;p_SS2CIj(k>0dl@` zCMQpyw2vw0YJPVy&&8EqO4+GqHjHXy5(|$*Uc}7OC=-i4X4wzCEt}@F#24RkhwVJp zn=}d=oMtJmMu8s)SEkD3N1qLW-?ncpxn-6+miEzSlc7=ajR5Wgvb3zKO~zS_QO-0o zKEVF^e!RiSOZFbRZmm+Y%p#;xB&`>!<>niIrvL0E5pao6F!eCbx_Iz`vI%`Fp?xp5 zv>-ONwl;ZsOh0)VHmc58UL|OEYf?|Ey=+zP-i=%vx;1q?V|nNO^DwhQGCam1o#>t6 z*!u{Hl-v3pX(VO!HEyjk;f(0T_Oj22!Aj@)4XZ`pr5iIQz9(}s73alFN20Sk4t>aZ z2G^$3j6^=W1*4#hOPj1Mjpj+$^^-T{QhYDD>2Y=G`>%?T+~Y2G@$ENszhhdcA=g#f z#7;Yck%?5qCo3{g$-QSd-9Jh%ce9CZpoJN25MR(}f2~T?`Aj@!eJoA;t4-1IMS08x zq#$hO=0fLHpM`#K*42lg(?k|2XW3e&T0w0dQXyD-i>L?t8c!1 z8*Uq3IB1U99qzF+3|EzUp1s&HrmTg=uamaKYU1~Cey8#-kmuq6ddxKO2h9n&02)_b zbxX8jU8&hTM0*hNHitdK{WY{Y6I*2{tl!L9PH8k$&H0Sq$NZzyc20F$^mRXp+1EAa zJT&#}ifwXVib-Yr2W~srsBI8+AnzwhXHRKy7^Pa##6NMA2lHJyh~Bey&Q6WYdtk?{ z`!VRO8}F*q*UPx`1{PnAB!A-5YY`B0%8XE&8=mj%jihM`TIOr*(Z2Dyh`m6;a^jtr zUejG&Vd3mH*32T(j5y)DZ-aI(5UuM^+6qn}_>=gHnedW~-W%m)p4l$9Kk0W*&b_;w za$bT9*YhTslrf&2BEH8cZE2&0V{H;L#8M!x(y3rjJ<{z_n`Pct1`fS9x6<8o1`kVc zGfi!mY<$i3Phy^WF$sHo5Q7_7vMU9D%4aZ6c|E3C1;vC4rxcf5r4~==(aK|NpB)pm z7&=8i@CvWlWWHCaGm+VBV(&hkat4!LP@596O4d#mKP^BUOuyY_iO33C(`lII6o~Nk znBwtaVlp7&y?@5RfU14n_nIhhZ4TLndKCCpFW+Fo7rx-Hyi9X7qM{Axt= z1y1mHkts*BxtY%7q>*H$D&@*)I;tuNT^%+`3 zDWg_h70=HM7emCx8@O~0xcw=ZTqd6#XHCGXHbVv=Sh_XIpc?^mf7!p1BGfA`{qn}RgqVV zE$4!5a{KVAJD2H2{R5L<^Yhb2h4PG3W{tk0tVJ(`2c{leG&Z3k^lryr<( z+uUa;1_6mXX1cQ)@=ljFqm=;t10)f=e{+g?DR=?jg5Lb55Mg}f4i**HwNj|fqZ1vO zCj{GH^iH*Kl;dJQn-1=N^ErUe)<$LBdab@jHEbSr+vRS8*cLpoSbenfO8$lydAV6g zK%#bzN`Pz5tiy-*nnuCNoo6m+NR5yNkz2Et3z1(Y`j+sfdxBHu?7AbvsPfK2v@TxQ z@-fJY=WibVssk66rkv}(6jC$PhT-jAeA~WYmy2AZo7X9aa^)cdFAd=hlW;+*Zco#z zaA=XMao@Hsa=e(j0@*-l<*V`%Pt#L%rf~{%4cAVx+wp-j+bXBbQWBqfOz&@?6O%(7 z;+4AlNx90f$~9lCj1D`BaL<(G`ht`FZ$%?LS_EnIzXoL$(CQ@GQ}+|u-Li7EB20k^tLtInel>({PEOTeC;C|AVD zlzC;B-lNXJj=2M6qB-^t9NFsqk$ML#=TFK-l5}tz#WWN$ut-djYDV6WjT35hlbP5F z!}p0OcJ%I*N(x&4Y?N_NH99xS-uI4J%UGPj_0v!#nPQD-vcbHd_2JU=u7n+lr$3eO z$J!5_C7P3xN!TacYblGm3aYo9Pndb!Tr1$WzfsTKDDVG3=1qP0h$&E9EYzW^&=&`%!3}5V*FX`5&V?9@VKeD}>{Ic_<$Tp_GJU2s{2m6GDj=lsQ zsZ%yvaVMFdV@1%I=K8k^$7Qd;u*C>(mXH@I*$qL;OmS-S+$ozlj&X;&?vj`@V;P4#y-tzx`0o`G;p2r}ZFR2`OF4j6vr z>*-|5`B3p|xB&|D*89Z3+B14p>qJ6JUJ(OigKAP*M_b5C+igEByZ)6 zh$1hQMVZ2E(d3xCH?+KIK_k#xPR#f~HqYOjS;IG4vO1hE;fJ{ zPL*!1ol77k?T@$=Xd4z;Pv%5(-r|K$v-i6Taqd4ddJY@;I-m83eX&@Tltwozq83bj zzJ{3WT`u3YL2ILYcrH+@jviEC=WTIMaLcUxAGD^+O;vWhZt8wE8mQ|V(GovPI!;5< zJhysrDPq@7mZL6TnOU%Sn#Y07f%u`X=$DD46QMhYHvLvF#q!&uCme^?1WRqEWuYBj zJ)A5oPX}~%eDe^*O=G9r6A}(#)mQ60V~!3p>RzIu&spJ6f)s2CO{RqNm+#h{#6fkL zk0s|Ar~&Psj#|Fsqprx zV|}SF;uG<)lo*QG(ma+T2M|1`jwG;h9U+Q@?SCjNUh$N|7+cb59Ccmz2I4#P*p*;|M&26S`UBU^Z6Z{ELFcy-GRT84py*drHZXY`v2pAa z^$j73v?ZhbgVfD@L!gh3c|hJh0^})5_ZvE07rBS9g#LTp18#jsXakeI{{|!D5 zp8J7thrS1Me;}^I+pa>vB_${mxcvoz0u>GsX!x%7Zx!zWf{sGz67%|nFL(X0T^ z{X{TB@u0>}1SfKf-rDOomGXpnVmkAgC+sXU1X2?Kfsp@`5giT+(XeuKQ*!ro74o$6 z^80UhZTAnue-kHr6egUnUG^MdXH?||fspwjTH2&(oJcYq0rR^t1^QpzKM4Z4={8gPJbJcOp^Lpi~iF9TpcWj! zKnZ6-aKHlwc>?CZ0eX-R0qDREn!r^AKnJqFfRcju5d^CVa0LMz7Y8T{0L;)4&;$S& zk?bJ~zdyhL%AEv|U>ZP3;1H|>09zPI2gr&fWK!7;1z&a(`jmqNL{1UP=O0Gs{t|n{ z2tT-n1kNCZ3f2C0{K5%BNb@5-BZxZzs2nHz`~<)ZTVDj%kpKg@ega@XJ~S}->mon| zu)#!@{-R_cjtH=Y`NYWf=A-)VB?g$`GpWBZ4G@N+ z{_hww5xM;RmI4WZS03wkGYfoFjoeOPyk%W#HWG( zj))%xfxeGNAOrZA0>Hu=1Hf|>1QLWP0ecuN{#S#55P`LnfWmS52b2VM?}Yw>L{I=7 zvJ4sXZ&)W3f#TlZChSxI3amr{`mmefznlmfEbM&5uSO0PU;~T1^|wI|@=*f@P-!rf z8gPdZMT1|d0XsNVECOVYMbLxeG=K>BHV*Ocaxn(Jq#?vCPXwE309vp=5rG61XbD80 zOGbcl$p{v(g3yAtfU#4u0nvAMg%KJv`gp>8v}rb%7Ru5fCpTl?Kg6?BBe3{T*qu3 z6$E?K00MH&+tJ0*+tKddMX*!v-rva*!blj53NV`yu!oj_NG8A$$`0a~031{loMr-? SpcJ4wGoXd!Tt*Oz;r{@S;Jm2- delta 5999 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 diff --git a/Tools/StarterScriptEditor/out/StarterScriptEditor-NET20.exe b/Tools/StarterScriptEditor/out/StarterScriptEditor-NET20.exe index a48f3e0ef2436ff658ba44c461c7b1603ddbfcce..088289ef77d7dce85c29e2374e64900b387f6b66 100644 GIT binary patch delta 7945 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 Y+%+PpYk`zk674%j)AhU0({A1W1MNpHy#N3J delta 7897 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 diff --git a/Tools/StarterScriptEditor/out/StarterScriptEditor.exe b/Tools/StarterScriptEditor/out/StarterScriptEditor.exe index dc72d03053ef121665200779adfa2067e727d115..9706aae56a12613a84ee281f68cbd0819a1984fc 100644 GIT binary patch delta 7703 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 Date: Sat, 25 Jul 2026 18:41:21 +0200 Subject: [PATCH 18/48] [PE Helper/Sysprep Preparator] BDE support --- .../PE_Helper/files/SysprepPreparator.zip | Bin 1642961 -> 1653115 bytes Tools/BDELib/BDELib.vb | 4 ++ Tools/BDELib/BDELib.vbproj | 3 ++ Tools/BDELib/Classes/ConversionStatus.vb | 45 ++++++++++++++++++ .../BDELib/Classes/VolumeConversionStatus.vb | 13 +++++ Tools/BDELib/Classes/VolumeWipingStatus.vb | 11 +++++ Tools/BDELib/Helpers/VolumeHelper.vb | 22 +++++++++ 7 files changed, 98 insertions(+) create mode 100644 Tools/BDELib/Classes/ConversionStatus.vb create mode 100644 Tools/BDELib/Classes/VolumeConversionStatus.vb create mode 100644 Tools/BDELib/Classes/VolumeWipingStatus.vb diff --git a/Helpers/extps1/PE_Helper/files/SysprepPreparator.zip b/Helpers/extps1/PE_Helper/files/SysprepPreparator.zip index 46a08ceb827fc30d14d09bdae16f77a264adf892..a6271353fa51d0970b34c3b5e3f67d0902d594ae 100644 GIT binary patch delta 1576162 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
F`u4(=pUL!d;oGszX+LYpa;Nnpe2Z1( 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 z z&RUrs*y1q5SS+K(XEgnn?bEQeTk5w!m)?mfR4c7e#`jjDc3C&hzFE4vPRkKX%JBxS= zxMEX8aq_zUSH^i#35uX|!XxEFsedA*GPjvmhYl8HH+?-?BdZE;y7)wTa+ z#bLkG|Bcx04RI5titQ;MOMjB(YB=nX9PzMWxsbtMC+9QYxeo4)h)^x6zU@ zRS<^CQ-3*K7L=W0RWYQXgRw!c<0b@PGoOsPYjH#^UN(-7UBDRvcM&RWCKCTPdi)D*#ub+475>p%! z-lN$6Y<_6)+mWrx&{0Bi;xoZ2cT_-guc3yT`Ne*n%2cFPxjbTID0*aQ9hzBD} zdya-h;}VrvVkB1|bE*k>AFC*;5}ntoeLdlcjh7maJ~sL5xkaho4!5SZ9#k3{=}YOv zel)X?J7oGs22k5NBqhRkd-@qeuLNxpQRVqrIgpv0-8b>PkSQjsSo5n(E{_BWq^>%g z|BVhr=D=Q&ZcpjHc&8}CN2j+a`p|lC zx!7GrMKK9)T{U|5Qs3+frR45X%|&}Bs9QBG*Rw;{9s;}sS=I;1*4owJa!F+>a6nsq%c zHS?{h8A|N*2({7j{UTaG)#~w^t)L-FD3dme5wDqHu+m4v3!)tWGt_8UaGhu)A!7~X z@3*)pQvmdLQ{6mlPr1$~o3@o+@M`^}6#Pxw7MhUYRwEyzBEX@(^}6tT?4g}vRia05 z=Ao^kBO7VVzB7NEw4}yIp47)_xYwnLuTd8XiP(tgHV>7^R(Qw5 z#UaMhXazP*TmW?yz&z5nppZF3)|$vLM5%}&Z=7uQPe zgNi-Kcr{0{nd%=kbQwCmatN8^4Khh%{+zOD4dgV@lJQ&iME0mK3adxRN1w@MJyTS< z8!omEuu$tc$SB%2%+4as59gTrNjO?GN$;G?9BFgINk^i#V1(NCZ}1BswxW>SjX_v3`@ua=Y4VctFZuZz`useC0H0TY``-&^9cKx;tK9>>$b2c`)$lEjz`U03 z!osr~16D(=X2sUj7dM607{S6AY9a?I=d8b-u+r3(vHkCsK#(}| zOzB2tP;|wIek-4sq@Ab5t+k3`X7A7L%j2D@DfVwv3+{14J$~T`0&D?mc)vSfK{fN` z8A&kkc8+{Mjk6-0LI$mdU#(k!fDpms%bBc46>t3OUwb}^cyU_H$!ak=^RdY=SZbz8 zH&_Db1;3k5e3{>cWvU%tj97*PYe~V4;zH$m4OTlpMTFL}Bv0j5(_LE0M%7-Q>dkRp)pDr9i}!x+cW-SV&_U`DcLN-VX>w4u-V2qn(MlzX z41*ZgaE!k}YaDX3dlo=Uag6LAn?FPB2K6EqE94P_ySNC^PB(jVqn6o8r=yzl!A6uYJK&-C**x7^*ub9M34s$pfTLfTe3{MS6QGKJ$JTO(drSdnD4eip~_6$=A z(`T16?@ajF&Lw)FOT#?3Cd97fOoMVdv8z92kIqdh(9=r*-k&1c3$=-gSOOP(dHbetT>2c)jIWds_#W zL^amFr8c947)KyImxE1n8+WhUp1QeyTb`su{jyY4%1qJRk0(?11drg=>@iQBvf#RB z3-wlrDYN}rb5jI8;y$bV3SRDs3$Zg627r1h)HdMo0)@A_wgy7fmrJ&Dw!@$mePTD2 zUO&B~mZl8Y7RL`k`V(bh8B@wM`S6Lq$7}3|sPd>{{zk5>((SWOZ_74r?6>GAzc#)d zZ~TelbJ0EeC5M)k#Q9B<5-v`XQ;m{E_KIwjemSq-zzfFNOLTp%7kTc6@pPDLu^a0N zH3eJt1foMV9w82*x%y1 znG8hkYyx|@(NeYotC~!=7R*7N7yZ4o79HhZQiEr<_Q;)E+F52cqzBjYD@hJ^a(D|A z4!64`^y6r!C3a)5zd42@z8?zT9WR?q0(-9~u!ro%(NXqOVfV#l2Z3H~Z~ysg>o_mi zzVc`3kO(nbx`^nlVT3rEszOYEfF&McxdqBAluQihWWWy(v4okw%nR!IfCX0WSnr{VLTsSTt6pTzYN(g-XC(+J zgx>g;?40UNyPl)`iQw%(+{_Hh)21 z#c8p`o=%~oyLjimsmG4K{@uNH4_7Y_YNAWMckDCQa&Uv8p>c*2_CkD3d2A{1QJk^6 z-SX6d;){(sdp71I05sdni3SiVuTi%a!v1)?Ti9p0B;M_Rw&l++L_H1@zOssu>Xg{q zO~Nnj#@S0Y44BFQy{0Z$cSh?w^pTqeavw^D9DpmbYS3eG%hG!iAa^DgNg)s=M~Im* zC&bK46$0^MH2QCj(6y4;a-0=Sx3b`Pp18!xz6DVHgex$7nDkQsy5SM(eRS*YLQ-Bv zOOM63m zSc35ay)+<9E(ZpdUVbFuc2*oKC&{N+*Oh3#eEJ1BKl9EXn6;1EgEeCMGo^)!R0i+6 zF0@Zz-&1-pHw>WeeQyvmy0#`)d1E@Wpsn&o0eUwkyMZ`q5rln8OT9e(+1Q72xouw+ z+Wo{Wj>YRn`5AER^_eh^Jq0#kq!AOpPjewc6i5Sb{fTp%z=UK2*#}BZT zrCW?aI)yNKf>3yVR}+(@tTZuzy7A9L;WT($vklZF3yKqAmJq6lY$!^u-G!CVtZAk1m-Y3^Z6{eC1E^7t8_~{MXU|2#C7gAPNWhND>(t}h1vBF zD_iYwswfi9fMRNilvAatdv7NRo?7q2IN~s1($CL0uaW6kZ@g6!x8wS%h!i=nDTQ39 z!GhR(5kW4F?fA=099qwvuWkJ7h4yWv5_7l-3UatMkzEw(=+EnF6su*@+^UtIxK*z6 z(n2;3)CS>G$V8G?snIYJ(M_Vt`aoj^?t@*z6YD$_*+3|%NxMy za{Ytwz6lW=F5n6OPtJ3HiZcac_e*t2gVx+ zck5V^7Q@Vrqe(c=5LYJDec>+OcIZ1vtg)BZ+P2~{p%~taJvC`_T=~*s1sAu|`|nygN3P?A z=McSnDQ^b(*IaxJ37gjQ7P{wzksxn;&`z+a3v4xA8U?WhT^$$F0rQQ;4QgW_9E-1c zxJ>gZn^bGJy|V94|c9wtp4361>WB8X@7tJ@Iw%CYUP$oUypL9?{2+5f(TH8B3TE zL|~sYA|ILF?hi!N?X}tQyN1v4Z2*{yPk$Ncb|LQvQ~h$im*ot6nfD2?x~Zy0=7Jyi zoGQ0S!vmB9SxpT+Xic8 zBZRrds|2|mm+8i=|AxjLAANbai`iA7@PXocBmtYO2=gj-Ng0#*XXC9>Y`3J2DRj#f zO^+ZGEc=Pd9ClO6xim(&nGVq6ohKI#7YgoX&W)Sgk`8h?%bSpYdNDW4U^=-|T7u$6 zl91RZUL(h-JOpwy95MI<7jdwQMBvWb2?Yr{1;@C%mj^jzEFvFjr(=9S(JG2#cDe-- zz(D&f;(UZ0fetJBdii0};J$mGvr3ig*j9!6n7A;d;b+HeWVW$EoG~t?lT+eR&WI=c znumb`1?L>&bXqV^%mkUI-9h^03rs&4}id6WMcaZvGIzl}L5 zfMgDwn^jlHB+)_r70YmWc{OmNcQy@hMXLln1lY zxZj>kx1YB|23~6M8rUhkENb)&4e4k%p7F3-lV2*8(@0sA7Pv}YxsqT= z!to$3A4fKwy*n=Y)^33CN!TgLz5i*QC_$aRqe4IRBZaD{DCMCvTlB8;H9uNt79%l_ zzqdQv;pwbJh_XryI_a;J{QR#YSKc#c@R@0hp_#tmOmBm8_t|?3sRXN=;aQC2U4Z7m z`NA`nh~kLkqqjDiHM|@J+lNG7PaR8?VNX^u68(Xv*Ze>I*nrue%Hgwb^@RBmU@h_G zGKkLA#WH{MU!dWoz}p4=uel~CHvI<};@;PbZokp4^~!?LB?dKowZ;P{(GZr_$%7xi zdBZU@M=B%sIQKT6DsA-tIDq1v=cIbGvp^RfUpz~HW5lW~iS-`frT?9Hn1q8?L|dGc zT*{@4LRxSew*cjz%A+`#1qsf0r*z$r0Gztw-wY_7h|97GzQj(+%ze4B*qegZsl#N% z$*LTmgF1Mm*^~2Qsspx2)YkQ%gs&|mM?&@}slJ?d<#G&MXT^SQWs|ba#vTgVsDyaY zE~glp_J5)JV3#E&5JaC%@!_I2%z@QWlZ$N|E6SfU*zo(luopZ z5PeL5cuWy8EStCoD3>LGK%X1<3%qm7b%NruQW<(24C-{i#)gTK`m~+LlPuVX9x+J| z?^O<#E183)Fd?UHh?V(JLfO|ipzc*

G?1prj$C6l~EZ*QDE(`u2=!T!(A)qBzA0 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

" Else - pkgCustomPropsList = "None" + pkgCustomPropsList = LocalizationService.ForSection("ImageInfoSave.Report")("None.Label") End If If pkgInfo.Features.Count > 0 Then Dim pkgFeats As DismFeatureCollection = pkgInfo.Features @@ -417,18 +283,18 @@ Public Class ImgInfoSaveDlg Next pkgFeaturesList &= "" Else - pkgFeaturesList = "None" + pkgFeaturesList = LocalizationService.ForSection("ImageInfoSave.Report")("None.Label") End If Contents &= GetTableRow(New String() {CodeBlockChar & pkgInfo.PackageName & CodeBlockChar, - Casters.CastDismApplicabilityStatus(pkgInfo.Applicable), + Casters.Applicability(pkgInfo.Applicable), pkgInfo.Copyright, pkgInfo.Company, - pkgInfo.CreationTime & If(pkgInfo.CreationTime.Year < 1900, " - **Preposterous time and date**", ""), + pkgInfo.CreationTime & If(pkgInfo.CreationTime.Year < 1900, LocalizationService.ForSection("ImageInfoSave.Report")("Preposterous.Time.Date.Label"), ""), pkgInfo.Description, pkgInfo.InstallClient, CodeBlockChar & pkgInfo.InstallPackageName & CodeBlockChar, pkgInfo.InstallTime, - pkgInfo.LastUpdateTime & If(pkgInfo.LastUpdateTime.Year < 1900, " - **Preposterous time and date**", ""), + pkgInfo.LastUpdateTime & If(pkgInfo.LastUpdateTime.Year < 1900, LocalizationService.ForSection("ImageInfoSave.Report")("Preposterous.Time.Date.Label"), ""), pkgInfo.DisplayName, pkgInfo.ProductName, pkgInfo.ProductVersion.ToString(), @@ -436,45 +302,21 @@ Public Class ImgInfoSaveDlg Casters.CastDismRestartType(pkgInfo.RestartRequired), pkgInfo.SupportInformation, Casters.CastDismPackageState(pkgInfo.PackageState), - Casters.CastDismFullyOfflineInstallationType(pkgInfo.FullyOffline), - "None", + Casters.OfflineInstallType(pkgInfo.FullyOffline), + LocalizationService.ForSection("ImageInfoSave.Report")("None.Label"), pkgCustomPropsList, pkgFeaturesList}. ToList()) End If Next - Contents &= CrLf & GetParagraph("Complete package information has been gathered.") & CrLf + Contents &= CrLf & GetParagraph(LocalizationService.ForSection("ImageInfoSave.Report")("PackageInfo.Ready.Label")) & CrLf Else - Select Case MainForm.Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - msg(0) = "Saving installed packages..." - Case "ESN" - msg(0) = "Guardando paquetes instalados..." - Case "FRA" - msg(0) = "Sauvegarde des paquets installés en cours..." - Case "PTB", "PTG" - msg(0) = "Guardar os pacotes instalados..." - Case "ITA" - msg(0) = "Salvataggio pacchetti installati..." - End Select - Case 1 - msg(0) = "Saving installed packages..." - Case 2 - msg(0) = "Guardando paquetes instalados..." - Case 3 - msg(0) = "Sauvegarde des paquets installés en cours..." - Case 4 - msg(0) = "Guardar os pacotes instalados..." - Case 5 - msg(0) = "Salvataggio pacchetti installati..." - End Select + msg(0) = LocalizationService.ForSection("ImageInfoSave.Packages")("SavePackages.Message") ReportChanges(msg(0), 50) - Contents &= GetTableHeader(New String() {"Package name", - "Package state", - "Package release type", - "Package install time"}. + Contents &= GetTableHeader(New String() {LocalizationService.ForSection("ImageInfoSave.Report")("PackageName.Label"), + LocalizationService.ForSection("ImageInfoSave.Report")("PackageState.Label"), + LocalizationService.ForSection("ImageInfoSave.Report")("Package.Release.Type.Label"), + LocalizationService.ForSection("ImageInfoSave.Report")("Package.Install.Time.Label")}. ToList()) For Each installedPackage As DismPackage In InstalledPkgInfo Contents &= GetTableRow(New String() {CodeBlockChar & installedPackage.PackageName & CodeBlockChar, @@ -483,7 +325,7 @@ Public Class ImgInfoSaveDlg installedPackage.InstallTime}. ToList()) Next - Contents &= CrLf & GetParagraph("Complete package information has not been gathered") & CrLf + Contents &= CrLf & GetParagraph(LocalizationService.ForSection("ImageInfoSave.Report")("PackageInfo.Missing.Label")) & CrLf End If End Using Catch ex As Exception @@ -496,92 +338,44 @@ Public Class ImgInfoSaveDlg Private Sub GetPackageFileInformation() Dim msg As String = "" - Select Case MainForm.Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - msg = "Preparing package information processes..." - Case "ESN" - msg = "Preparando procesos de información de paquetes..." - Case "FRA" - msg = "Préparation des processus d'information des paquets en cours..." - Case "PTB", "PTG" - msg = "A preparar processos de informação sobre pacotes..." - Case "ITA" - msg = "Preparazione processi verifica informazioni pacchetti..." - End Select - Case 1 - msg = "Preparing package information processes..." - Case 2 - msg = "Preparando procesos de información de paquetes..." - Case 3 - msg = "Préparation des processus d'information des paquets en cours..." - Case 4 - msg = "A preparar processos de informação sobre pacotes..." - Case 5 - msg = "Preparazione processi verifica informazioni pacchetti..." - End Select - Contents &= GetHeader("Package file information", HeaderSize.Header2) & CrLf & - GetListItems(New String() {"Image file to get information from: " & If(SourceImage <> "" And Not OnlineMode, Quote & SourceImage & Quote, "active installation")}.ToList()) & CrLf + msg = LocalizationService.ForSection("ImgInfo.PkgFiles")("Preparing.Package.Message") + Contents &= GetHeader(LocalizationService.ForSection("ImageInfoSave.Report")("Package.File.Label"), HeaderSize.Header2) & CrLf & + GetListItems(New String() {LocalizationService.ForSection("ImageInfoSave.Report")("ImageFile.Get.Label") & If(SourceImage <> "" And Not OnlineMode, Quote & SourceImage & Quote, LocalizationService.ForSection("ImageInfoSave.Report")("Active.Install.Label.Label"))}.ToList()) & CrLf Debug.WriteLine("[GetPackageFileInformation] Starting task...") Try Debug.WriteLine("[GetPackageFileInformation] Starting API...") DismApi.Initialize(DismLogLevel.LogErrors) Debug.WriteLine("[GetPackageFileInformation] Creating image session...") ReportChanges(msg, 0) - Contents &= GetParagraph("Amount of package files to get information about: " & PackageFiles.Count, ParagraphStyle.Bold) - Contents &= CrLf & GetTableHeader(New String() {"Package name", - "Applicable?", - "Copyright", - "Company", - "Creation time", - "Description", - "Install client", - "Install package name", - "Install time", - "Last update time", - "Display name", - "Product name", - "Product version", - "Release type", - "Restart required?", - "Support information", - "Package state", - "Boot up required?", - "Capability identity", - "Custom properties", - "Features"}. + Contents &= GetParagraph(LocalizationService.ForSection("ImageInfoSave.Report")("Amount.Package.Files.Label") & PackageFiles.Count, ParagraphStyle.Bold) + Contents &= CrLf & GetTableHeader(New String() {LocalizationService.ForSection("ImageInfoSave.Report")("PackageName.Label"), + LocalizationService.ForSection("ImageInfoSave.Report")("Applicable.Label"), + LocalizationService.ForSection("ImageInfoSave.Report")("Copyright.Label"), + LocalizationService.ForSection("ImageInfoSave.Report")("Company.Label"), + LocalizationService.ForSection("ImageInfoSave.Report")("CreationTime.Label"), + LocalizationService.ForSection("ImageInfoSave.Report")("Description"), + LocalizationService.ForSection("ImageInfoSave.Report")("InstallClient.Label"), + LocalizationService.ForSection("ImageInfoSave.Report")("Install.Package.Name.Label"), + LocalizationService.ForSection("ImageInfoSave.Report")("InstallTime.Label"), + LocalizationService.ForSection("ImageInfoSave.Report")("Last.Update.Time.Label"), + LocalizationService.ForSection("ImageInfoSave.Report")("DisplayName.Label"), + LocalizationService.ForSection("ImageInfoSave.Report")("ProductName.Label"), + LocalizationService.ForSection("ImageInfoSave.Report")("ProductVersion.Label"), + LocalizationService.ForSection("ImageInfoSave.Report")("ReleaseType.Label"), + LocalizationService.ForSection("ImageInfoSave.Report")("RestartRequired.Label"), + LocalizationService.ForSection("ImageInfoSave.Report")("SupportInfo.Label"), + LocalizationService.ForSection("ImageInfoSave.Report")("PackageState.Label"), + LocalizationService.ForSection("ImageInfoSave.Report")("Boot.Up.Required.Label"), + LocalizationService.ForSection("ImageInfoSave.Report")("Capability.Identity.Label"), + LocalizationService.ForSection("ImageInfoSave.Report")("CustomProps.Label"), + LocalizationService.ForSection("ImageInfoSave.Report")("Features.Label")}. ToList()) Dim pkgCustomPropsList As String = "
    " Dim pkgFeaturesList As String = "
      " Using imgSession As DismSession = If(OnlineMode, DismApi.OpenOnlineSession(), DismApi.OpenOfflineSession(ImgMountDir)) For Each pkgFile In PackageFiles Try - Select Case MainForm.Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - msg = "Getting information from package files... (package file " & PackageFiles.IndexOf(pkgFile) + 1 & " of " & PackageFiles.Count & ")" - Case "ESN" - msg = "Obteniendo información de archivos de paquetes... (archivo de paquete " & PackageFiles.IndexOf(pkgFile) + 1 & " de " & PackageFiles.Count & ")" - Case "FRA" - msg = "Obtention des informations des fichiers paquets en cours... (fichier paquet " & PackageFiles.IndexOf(pkgFile) + 1 & " de " & PackageFiles.Count & ")" - Case "PTB", "PTG" - msg = "Obter informações dos ficheiros do pacote... (ficheiro do pacote " & PackageFiles.IndexOf(pkgFile) + 1 & " de " & PackageFiles.Count & ")" - Case "ITA" - msg = "Verifica informazioni file pacchetto... (file pacchetto " & PackageFiles.IndexOf(pkgFile) + 1 & " di " & PackageFiles.Count & ")" - End Select - Case 1 - msg = "Getting information from package files... (package file " & PackageFiles.IndexOf(pkgFile) + 1 & " of " & PackageFiles.Count & ")" - Case 2 - msg = "Obteniendo información de archivos de paquetes... (archivo de paquete " & PackageFiles.IndexOf(pkgFile) + 1 & " de " & PackageFiles.Count & ")" - Case 3 - msg = "Obtention des informations des fichiers paquets en cours... (fichier paquet " & PackageFiles.IndexOf(pkgFile) + 1 & " de " & PackageFiles.Count & ")" - Case 4 - msg = "Obter informações dos ficheiros do pacote... (ficheiro do pacote " & PackageFiles.IndexOf(pkgFile) + 1 & " de " & PackageFiles.Count & ")" - Case 5 - msg = "Verifica informazioni file pacchetto... (file pacchetto " & PackageFiles.IndexOf(pkgFile) + 1 & " di " & PackageFiles.Count & ")" - End Select + msg = LocalizationService.ForSection("ImgInfo.PackageFiles").Format("Loading.Package.Message", PackageFiles.IndexOf(pkgFile) + 1, PackageFiles.Count) ReportChanges(msg, (PackageFiles.IndexOf(pkgFile) / PackageFiles.Count) * 100) If File.Exists(pkgFile) Then Dim pkgInfoEx As DismPackageInfoEx = Nothing @@ -604,7 +398,7 @@ Public Class ImgInfoSaveDlg Next pkgCustomPropsList &= "
    " Else - pkgCustomPropsList = "None" + pkgCustomPropsList = LocalizationService.ForSection("ImageInfoSave.Report")("None.Label") End If If pkgInfoEx.Features.Count > 0 Then Dim pkgFeats As DismFeatureCollection = pkgInfoEx.Features @@ -613,16 +407,16 @@ Public Class ImgInfoSaveDlg Next pkgFeaturesList &= "
" Else - pkgFeaturesList = "None" + pkgFeaturesList = LocalizationService.ForSection("ImageInfoSave.Report")("None.Label") End If Contents &= GetTableRow(New String() {CodeBlockChar & pkgInfoEx.PackageName & CodeBlockChar, - Casters.CastDismApplicabilityStatus(pkgInfoEx.Applicable), + Casters.Applicability(pkgInfoEx.Applicable), pkgInfoEx.Copyright, pkgInfoEx.Company, pkgInfoEx.CreationTime, pkgInfoEx.Description, - If(pkgInfoEx.InstallClient = "", "None", pkgInfoEx.InstallClient), - If(pkgInfoEx.InstallPackageName = "", "None", CodeBlockChar & pkgInfoEx.InstallPackageName & CodeBlockChar), + If(pkgInfoEx.InstallClient = "", LocalizationService.ForSection("ImageInfoSave.Report")("None.Label"), pkgInfoEx.InstallClient), + If(pkgInfoEx.InstallPackageName = "", LocalizationService.ForSection("ImageInfoSave.Report")("None.Label"), CodeBlockChar & pkgInfoEx.InstallPackageName & CodeBlockChar), pkgInfoEx.InstallTime, pkgInfoEx.LastUpdateTime, pkgInfoEx.DisplayName, @@ -632,8 +426,8 @@ Public Class ImgInfoSaveDlg Casters.CastDismRestartType(pkgInfoEx.RestartRequired), pkgInfoEx.SupportInformation, Casters.CastDismPackageState(pkgInfoEx.PackageState), - Casters.CastDismFullyOfflineInstallationType(pkgInfoEx.FullyOffline), - If(pkgInfoEx.CapabilityId = "", "None", CodeBlockChar & pkgInfoEx.CapabilityId & CodeBlockChar), + Casters.OfflineInstallType(pkgInfoEx.FullyOffline), + If(pkgInfoEx.CapabilityId = "", LocalizationService.ForSection("ImageInfoSave.Report")("None.Label"), CodeBlockChar & pkgInfoEx.CapabilityId & CodeBlockChar), pkgCustomPropsList, pkgFeaturesList}.ToList()) ElseIf pkgInfo IsNot Nothing Then @@ -646,7 +440,7 @@ Public Class ImgInfoSaveDlg Next pkgCustomPropsList &= "" Else - pkgCustomPropsList = "None" + pkgCustomPropsList = LocalizationService.ForSection("ImageInfoSave.Report")("None.Label") End If If pkgInfo.Features.Count > 0 Then Dim pkgFeats As DismFeatureCollection = pkgInfo.Features @@ -655,16 +449,16 @@ Public Class ImgInfoSaveDlg Next pkgFeaturesList &= "" Else - pkgFeaturesList = "None" + pkgFeaturesList = LocalizationService.ForSection("ImageInfoSave.Report")("None.Label") End If Contents &= GetTableRow(New String() {CodeBlockChar & pkgInfo.PackageName & CodeBlockChar, - Casters.CastDismApplicabilityStatus(pkgInfo.Applicable), + Casters.Applicability(pkgInfo.Applicable), pkgInfo.Copyright, pkgInfo.Company, pkgInfo.CreationTime, pkgInfo.Description, - If(pkgInfo.InstallClient = "", "None", pkgInfo.InstallClient), - If(pkgInfo.InstallPackageName = "", "None", CodeBlockChar & pkgInfo.InstallPackageName & CodeBlockChar), + If(pkgInfo.InstallClient = "", LocalizationService.ForSection("ImageInfoSave.Report")("None.Label"), pkgInfo.InstallClient), + If(pkgInfo.InstallPackageName = "", LocalizationService.ForSection("ImageInfoSave.Report")("None.Label"), CodeBlockChar & pkgInfo.InstallPackageName & CodeBlockChar), pkgInfo.InstallTime, pkgInfo.LastUpdateTime, pkgInfo.DisplayName, @@ -674,8 +468,8 @@ Public Class ImgInfoSaveDlg Casters.CastDismRestartType(pkgInfo.RestartRequired), pkgInfo.SupportInformation, Casters.CastDismPackageState(pkgInfo.PackageState), - Casters.CastDismFullyOfflineInstallationType(pkgInfo.FullyOffline), - "None", + Casters.OfflineInstallType(pkgInfo.FullyOffline), + LocalizationService.ForSection("ImageInfoSave.Report")("None.Label"), pkgCustomPropsList, pkgFeaturesList}.ToList()) End If @@ -697,73 +491,11 @@ Public Class ImgInfoSaveDlg Private Sub GetFeatureInformation(GetEverything As Boolean) Dim InstalledFeatInfo As DismFeatureCollection = Nothing Dim msg As String() = New String(2) {"", "", ""} - Select Case MainForm.Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - msg(0) = "Preparing feature information processes..." - msg(1) = "The program has obtained basic information of the installed features of this image. You can also get complete information of such features and save it in the report." & CrLf & CrLf & - "Do note that this will take longer depending on the number of installed features." & CrLf & CrLf & - "Do you want to get this information and save it in the report?" - msg(2) = "Feature information" - Case "ESN" - msg(0) = "Preparando procesos de información de características..." - msg(1) = "El programa ha obtenido información básica de las características instaladas en esta imagen. También puede obtener información completa de dichas características y guardarla en el informe." & CrLf & CrLf & - "Dese cuenta de que esto tardará más, dependiendo del número de características instaladas." & CrLf & CrLf & - "¿Desea obtener esta información y guardarla en el informe?" - msg(2) = "Información de características" - Case "FRA" - msg(0) = "Préparation des processus d'information sur les caractéristiques en cours..." - msg(1) = "Le programme a obtenu des informations basiques sur les caractéristiques installées sur cette image. Vous pouvez également obtenir des informations complètes sur ces caractéristiques et les enregistrer dans le rapport." & CrLf & CrLf & - "Notez que cette opération peut prendre plus de temps en fonction du nombre de caractéristiques installées." & CrLf & CrLf & - "Souhaitez-vous obtenir ces informations et les enregistrer dans le rapport ?" - msg(2) = "Informations sur les caractéristiques" - Case "PTB", "PTG" - msg(0) = "A preparar processos de informação de características..." - msg(1) = "O programa obteve informações básicas sobre as características instaladas desta imagem. Também pode obter informações completas sobre essas características e guardá-las no relatório." & CrLf & CrLf & - "Tenha em atenção que isto pode demorar mais tempo, dependendo do número de características instaladas." & CrLf & CrLf & - "Pretende obter esta informação e guardá-la no relatório?" - msg(2) = "Informação sobre as características" - Case "ITA" - msg(0) = "Preparazione processi verifica informazioni funzionalità..." - msg(1) = "Il programma ha verificato le informazioni di base sulle funzionalità installate in questa immagine. È possibile avere informazioni complete su tali funzionalità e salvarle nel rapporto." & CrLf & CrLf & - "Tieni presente che questa operazione richiederà più tempo a seconda del numero di funzionalità installate." & CrLf & CrLf & - "Vuoi avere queste informazioni e salvarle nel rapporto?" - msg(2) = "Informazioni funzionalità" - End Select - Case 1 - msg(0) = "Preparing feature information processes..." - msg(1) = "The program has obtained basic information of the installed features of this image. You can also get complete information of such features and save it in the report." & CrLf & CrLf & - "Do note that this will take longer depending on the number of installed features." & CrLf & CrLf & - "Do you want to get this information and save it in the report?" - msg(2) = "Feature information" - Case 2 - msg(0) = "Preparando procesos de información de características..." - msg(1) = "El programa ha obtenido información básica de las características instaladas en esta imagen. También puede obtener información completa de dichos características y guardarla en el informe." & CrLf & CrLf & - "Dese cuenta de que esto tardará más, dependiendo del número de características instalados." & CrLf & CrLf & - "¿Desea obtener esta información y guardarla en el informe?" - msg(2) = "Información de características" - Case 3 - msg(0) = "Préparation des processus d'information sur les caractéristiques en cours..." - msg(1) = "Le programme a obtenu des informations basiques sur les caractéristiques installées sur cette image. Vous pouvez également obtenir des informations complètes sur ces caractéristiques et les enregistrer dans le rapport." & CrLf & CrLf & - "Notez que cette opération peut prendre plus de temps en fonction du nombre de caractéristiques installées." & CrLf & CrLf & - "Souhaitez-vous obtenir ces informations et les enregistrer dans le rapport ?" - msg(2) = "Informations sur les caractéristiques" - Case 4 - msg(0) = "A preparar processos de informação de características..." - msg(1) = "O programa obteve informações básicas sobre as características instaladas desta imagem. Também pode obter informações completas sobre essas características e guardá-las no relatório." & CrLf & CrLf & - "Tenha em atenção que isto pode demorar mais tempo, dependendo do número de características instaladas." & CrLf & CrLf & - "Pretende obter esta informação e guardá-la no relatório?" - msg(2) = "Informação sobre as características" - Case 5 - msg(0) = "Preparazione processi verifica informazioni funzionalità..." - msg(1) = "Il programma ha verificato le informazioni di base sulle funzionalità installate in questa immagine. È possibile avere informazioni complete su tali funzionalità e salvarle nel rapporto." & CrLf & CrLf & - "Tieni presente che questa operazione richiederà più tempo a seconda del numero di funzionalità installate." & CrLf & CrLf & - "Vuoi avere queste informazioni e salvarle nel rapporto?" - msg(2) = "Informazioni funzionalità" - End Select - Contents &= GetHeader("Feature information", HeaderSize.Header2) & CrLf & - GetListItems(New String() {"Image file to get information from: " & If(SourceImage <> "" And Not OnlineMode, Quote & SourceImage & Quote, "active installation")}.ToList()) & CrLf + msg(0) = LocalizationService.ForSection("ImgInfo.Features")("Preparing.Feature.Message") + msg(1) = LocalizationService.ForSection("ImageInfoSave.Features")("Basic.Ready.Message") & LocalizationService.ForSection("ImageInfoSave.Features")("May.Take.Long.Message") & CrLf & CrLf & LocalizationService.ForSection("ImageInfoSave.Features")("Prompt.Label") + msg(2) = LocalizationService.ForSection("ImageInfoSave.Features")("FeatureInfo.Message") + Contents &= GetHeader(LocalizationService.ForSection("ImageInfoSave.Report")("FeatureInfo.Label"), HeaderSize.Header2) & CrLf & + GetListItems(New String() {LocalizationService.ForSection("ImageInfoSave.Report")("ImageFile.Get.Label") & If(SourceImage <> "" And Not OnlineMode, Quote & SourceImage & Quote, LocalizationService.ForSection("ImageInfoSave.Report")("Active.Install.Label.Label"))}.ToList()) & CrLf Debug.WriteLine("[GetFeatureInformation] Starting task...") Try Debug.WriteLine("[GetFeatureInformation] Starting API...") @@ -774,70 +506,22 @@ Public Class ImgInfoSaveDlg Debug.WriteLine("[GetFeatureInformation] Getting basic feature information...") ReportChanges(msg(0), 5) InstalledFeatInfo = DismApi.GetFeatures(imgSession) - Contents &= GetParagraph("Information summary for " & InstalledFeatInfo.Count & " feature(s):", ParagraphStyle.Bold) & CrLf - Select Case MainForm.Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - msg(0) = "Features have been obtained" - Case "ESN" - msg(0) = "Las características han sido obtenidas" - Case "FRA" - msg(0) = "Des caractéristiques ont été obtenues" - Case "PTB", "PTG" - msg(0) = "As características foram obtidas" - Case "ITA" - msg(0) = "Le funzionalità sono state acquisite" - End Select - Case 1 - msg(0) = "Features have been obtained" - Case 2 - msg(0) = "Las características han sido obtenidas" - Case 3 - msg(0) = "Des caractéristiques ont été obtenues" - Case 4 - msg(0) = "As características foram obtidas" - Case 5 - msg(0) = "Le funzionalità sono state acquisite" - End Select + Contents &= GetParagraph(LocalizationService.ForSection("ImageInfoSave.Report")("InfoSummary.Label") & InstalledFeatInfo.Count & LocalizationService.ForSection("ImageInfoSave.Report")("FeatureCount.Suffix"), ParagraphStyle.Bold) & CrLf + msg(0) = LocalizationService.ForSection("ImageInfoSave.Features")("FeaturesObtained.Message") ReportChanges(msg(0), 10) Dim featCustomPropsList As String = "