diff --git a/DISMTools.vbproj b/DISMTools.vbproj
index 906059b5..549b0520 100644
--- a/DISMTools.vbproj
+++ b/DISMTools.vbproj
@@ -91,6 +91,9 @@
True
+
+ True
+
True
@@ -1043,6 +1046,9 @@
+
+
+
diff --git a/Helpers/dthelper.bat b/Helpers/dthelper.bat
index c9efb110..9b464c89 100644
--- a/Helpers/dthelper.bat
+++ b/Helpers/dthelper.bat
@@ -33,6 +33,11 @@ if "%1%"=="/sh" (
:dt_wmic
cls
+
+:: Show deprecation notice
+echo This function is deprecated and has been replaced by native WMI commands.
+echo You can still access this function, but it will be removed in the future.
+
echo Getting drive information. Please wait...
if exist .\wmic (
del .\wmic
diff --git a/Installer/Output/dt_setup.exe b/Installer/Output/dt_setup.exe
index 9087132e..33639781 100644
Binary files a/Installer/Output/dt_setup.exe and b/Installer/Output/dt_setup.exe differ
diff --git a/Installer/dt.iss b/Installer/dt.iss
index 1c032958..c49a2bdb 100644
--- a/Installer/dt.iss
+++ b/Installer/dt.iss
@@ -69,6 +69,7 @@ Source: ".\files\Microsoft.Dism.dll"; DestDir: "{#pfDir}"; Flags: ignoreversion
Source: ".\files\ScintillaNET.dll"; DestDir: "{#pfDir}"; Flags: ignoreversion
Source: ".\files\System.dll"; DestDir: "{#pfDir}"; Flags: ignoreversion
Source: ".\files\System.Drawing.dll"; DestDir: "{#pfDir}"; Flags: ignoreversion
+Source: ".\files\System.Management.dll"; DestDir: "{#pfDir}"; Flags: ignoreversion
Source: ".\files\System.Windows.Forms.dll"; DestDir: "{#pfDir}"; Flags: ignoreversion
Source: ".\files\System.Xml.dll"; DestDir: "{#pfDir}"; Flags: ignoreversion
Source: ".\files\System.Xml.Linq.dll"; DestDir: "{#pfDir}"; Flags: ignoreversion
diff --git a/MainForm.vb b/MainForm.vb
index 349205cb..36078516 100644
--- a/MainForm.vb
+++ b/MainForm.vb
@@ -12209,14 +12209,17 @@ Public Class MainForm
If ImgInfoSFD.ShowDialog() = Windows.Forms.DialogResult.OK Then
If Not ImgInfoSaveDlg.IsDisposed Then ImgInfoSaveDlg.Dispose()
ImgInfoSaveDlg.SaveTarget = ImgInfoSFD.FileName
- For x = 0 To Array.LastIndexOf(MountedImageMountDirs, MountedImageMountDirs.Last)
- If MountedImageMountDirs(x) = MountDir Then
- ImgInfoSaveDlg.SourceImage = MountedImageImgFiles(x)
- Exit For
- End If
- Next
+ If MountedImageMountDirs.Count > 0 Then
+ For x = 0 To Array.LastIndexOf(MountedImageMountDirs, MountedImageMountDirs.Last)
+ If MountedImageMountDirs(x) = MountDir Then
+ ImgInfoSaveDlg.SourceImage = MountedImageImgFiles(x)
+ Exit For
+ End If
+ Next
+ End If
ImgInfoSaveDlg.ImgMountDir = If(Not OnlineManagement, MountDir, "")
ImgInfoSaveDlg.OnlineMode = OnlineManagement
+ ImgInfoSaveDlg.OfflineMode = OfflineManagement
ImgInfoSaveDlg.AllDrivers = AllDrivers
ImgInfoSaveDlg.SaveTask = 0
ImgInfoSaveDlg.ShowDialog()
diff --git a/My Project/Resources.Designer.vb b/My Project/Resources.Designer.vb
index ee529da5..132e97d5 100644
--- a/My Project/Resources.Designer.vb
+++ b/My Project/Resources.Designer.vb
@@ -170,6 +170,36 @@ Namespace My.Resources
End Get
End Property
+ '''
+ ''' Busca un recurso adaptado de tipo System.Drawing.Bitmap.
+ '''
+ Friend ReadOnly Property backbox() As System.Drawing.Bitmap
+ Get
+ Dim obj As Object = ResourceManager.GetObject("backbox", resourceCulture)
+ Return CType(obj,System.Drawing.Bitmap)
+ End Get
+ End Property
+
+ '''
+ ''' Busca un recurso adaptado de tipo System.Drawing.Bitmap.
+ '''
+ Friend ReadOnly Property backbox_down() As System.Drawing.Bitmap
+ Get
+ Dim obj As Object = ResourceManager.GetObject("backbox_down", resourceCulture)
+ Return CType(obj,System.Drawing.Bitmap)
+ End Get
+ End Property
+
+ '''
+ ''' Busca un recurso adaptado de tipo System.Drawing.Bitmap.
+ '''
+ Friend ReadOnly Property backbox_focus() As System.Drawing.Bitmap
+ Get
+ Dim obj As Object = ResourceManager.GetObject("backbox_focus", resourceCulture)
+ Return CType(obj,System.Drawing.Bitmap)
+ End Get
+ End Property
+
'''
''' Busca un recurso adaptado de tipo System.Drawing.Bitmap.
'''
@@ -1808,13 +1838,14 @@ Namespace My.Resources
'''
''' Busca una cadena traducida similar a Bugfixes
'''
- '''- The background process details panel is now hidden when leaving the offline or online installation management modes
+ '''- Fixed an issue where the program threw an exception when attempting to save complete image information if no images were mounted
+ '''- When getting Windows PE configuration, the program no longer returns "Could not get value MB" if it fails to get the scratch space configuration
+ '''- Image information reports correctly detect the offline installation management mode now
+ '''- The image information saver now informs you when the target report file is being saved
'''
'''New features
'''
- '''- You can now access the offline installation management mode from the File menu
- '''- You will now see an image information report preview right after the generation process has been completed
- '''- When performing feature enablement, component store repair, and capability addition operations to an active installation in Safe Mode, the progress panel will inform you [resto de la cadena truncado]";.
+ '''- The program now rec [resto de la cadena truncado]";.
'''
Friend ReadOnly Property WhatsNew() As String
Get
diff --git a/My Project/Resources.resx b/My Project/Resources.resx
index a2043831..0a51e961 100644
--- a/My Project/Resources.resx
+++ b/My Project/Resources.resx
@@ -1099,14 +1099,18 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI
Bugfixes
-- The background process details panel is now hidden when leaving the offline or online installation management modes
+- Fixed an issue where the program threw an exception when attempting to save complete image information if no images were mounted
+- When getting Windows PE configuration, the program no longer returns "Could not get value MB" if it fails to get the scratch space configuration
+- Image information reports correctly detect the offline installation management mode now
+- The image information saver now informs you when the target report file is being saved
New features
-- You can now access the offline installation management mode from the File menu
-- You will now see an image information report preview right after the generation process has been completed
-- When performing feature enablement, component store repair, and capability addition operations to an active installation in Safe Mode, the progress panel will inform you about it
-- Added a menu entry to contribute to the help system
+- The program now recommends monospaced fonts for log windows
+- The initial setup wizard has had a minor redesign:
+ - The Back and Cancel buttons are now hidden, in favor of the window controls
+- The image application drive specifier now uses native WMI queries instead of the helper command
+- When getting information of driver packages, the progress bar will smoothly increase in value now
..\Resources\split_img.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
@@ -1117,4 +1121,13 @@ New features
..\Resources\about\mdl_discussion.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+
+ ..\Resources\FirstUse\backbox.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+
+
+ ..\Resources\FirstUse\backbox_down.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+
+
+ ..\Resources\FirstUse\backbox_focus.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+
\ No newline at end of file
diff --git a/Panels/FirstUse/PrgSetup.Designer.vb b/Panels/FirstUse/PrgSetup.Designer.vb
index 3979c755..ca67ae79 100644
--- a/Panels/FirstUse/PrgSetup.Designer.vb
+++ b/Panels/FirstUse/PrgSetup.Designer.vb
@@ -25,6 +25,7 @@ Partial Class PrgSetup
Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(PrgSetup))
Me.wndControlPanel = New System.Windows.Forms.Panel()
Me.Label1 = New System.Windows.Forms.Label()
+ Me.backBox = New System.Windows.Forms.PictureBox()
Me.minBox = New System.Windows.Forms.PictureBox()
Me.closeBox = New System.Windows.Forms.PictureBox()
Me.btnControlPanel = New System.Windows.Forms.Panel()
@@ -97,6 +98,7 @@ Partial Class PrgSetup
Me.Panel6 = New System.Windows.Forms.Panel()
Me.SaveFileDialog1 = New System.Windows.Forms.SaveFileDialog()
Me.wndControlPanel.SuspendLayout()
+ CType(Me.backBox, System.ComponentModel.ISupportInitialize).BeginInit()
CType(Me.minBox, System.ComponentModel.ISupportInitialize).BeginInit()
CType(Me.closeBox, System.ComponentModel.ISupportInitialize).BeginInit()
Me.btnControlPanel.SuspendLayout()
@@ -126,6 +128,7 @@ Partial Class PrgSetup
Me.wndControlPanel.BackColor = System.Drawing.Color.Transparent
Me.wndControlPanel.BackgroundImage = Global.DISMTools.My.Resources.Resources.wndPanel_Backdrop
Me.wndControlPanel.Controls.Add(Me.Label1)
+ Me.wndControlPanel.Controls.Add(Me.backBox)
Me.wndControlPanel.Controls.Add(Me.minBox)
Me.wndControlPanel.Controls.Add(Me.closeBox)
Me.wndControlPanel.Dock = System.Windows.Forms.DockStyle.Top
@@ -145,6 +148,18 @@ Partial Class PrgSetup
Me.Label1.TabIndex = 1
Me.Label1.Text = "Set up DISMTools"
'
+ 'backBox
+ '
+ Me.backBox.Anchor = CType((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
+ Me.backBox.Image = Global.DISMTools.My.Resources.Resources.backbox
+ Me.backBox.Location = New System.Drawing.Point(0, 0)
+ Me.backBox.Name = "backBox"
+ Me.backBox.Size = New System.Drawing.Size(46, 32)
+ Me.backBox.SizeMode = System.Windows.Forms.PictureBoxSizeMode.AutoSize
+ Me.backBox.TabIndex = 0
+ Me.backBox.TabStop = False
+ Me.backBox.Visible = False
+ '
'minBox
'
Me.minBox.Anchor = CType((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
@@ -204,6 +219,7 @@ Partial Class PrgSetup
Me.Back_Button.TabIndex = 0
Me.Back_Button.Text = "Back"
Me.Back_Button.UseVisualStyleBackColor = True
+ Me.Back_Button.Visible = False
'
'Next_Button
'
@@ -226,6 +242,7 @@ Partial Class PrgSetup
Me.Cancel_Button.TabIndex = 0
Me.Cancel_Button.Text = "Cancel"
Me.Cancel_Button.UseVisualStyleBackColor = True
+ Me.Cancel_Button.Visible = False
'
'BodyPanelContainer
'
@@ -1017,6 +1034,7 @@ Partial Class PrgSetup
Me.Text = "Set up DISMTools"
Me.wndControlPanel.ResumeLayout(False)
Me.wndControlPanel.PerformLayout()
+ CType(Me.backBox, System.ComponentModel.ISupportInitialize).EndInit()
CType(Me.minBox, System.ComponentModel.ISupportInitialize).EndInit()
CType(Me.closeBox, System.ComponentModel.ISupportInitialize).EndInit()
Me.btnControlPanel.ResumeLayout(False)
@@ -1125,4 +1143,5 @@ Partial Class PrgSetup
Friend WithEvents RadioButton1 As System.Windows.Forms.RadioButton
Friend WithEvents Panel8 As System.Windows.Forms.Panel
Friend WithEvents SaveFileDialog1 As System.Windows.Forms.SaveFileDialog
+ Friend WithEvents backBox As System.Windows.Forms.PictureBox
End Class
diff --git a/Panels/FirstUse/PrgSetup.vb b/Panels/FirstUse/PrgSetup.vb
index c628cf1a..8bdbfe6e 100644
--- a/Panels/FirstUse/PrgSetup.vb
+++ b/Panels/FirstUse/PrgSetup.vb
@@ -82,6 +82,39 @@ Public Class PrgSetup
End If
End Sub
+ Private Sub backBox_MouseEnter(sender As Object, e As EventArgs) Handles backBox.MouseEnter
+ backBox.Image = My.Resources.backbox_focus
+ End Sub
+
+ Private Sub backBox_MouseLeave(sender As Object, e As EventArgs) Handles backBox.MouseLeave
+ backBox.Image = My.Resources.backbox
+ End Sub
+
+ Private Sub backBox_MouseDown(sender As Object, e As MouseEventArgs) Handles backBox.MouseDown
+ backBox.Image = My.Resources.backbox_down
+ End Sub
+
+ Private Sub backBox_MouseUp(sender As Object, e As MouseEventArgs) Handles backBox.MouseUp
+ backBox.Image = My.Resources.backbox_focus
+ End Sub
+
+ Private Sub backBox_MouseHover(sender As Object, e As EventArgs) Handles backBox.MouseHover
+ Dim msg As String = ""
+ Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName
+ Case "ENU", "ENG"
+ msg = "Go back"
+ Case "ESN"
+ msg = "Atrás"
+ Case "FRA"
+ msg = "Retourner"
+ End Select
+ btnToolTip.SetToolTip(sender, msg)
+ End Sub
+
+ 'Private Sub backBox_Click(sender As Object, e As EventArgs) Handles backBox.Click
+ ' Back_Button.PerformClick()
+ 'End Sub
+
Private Sub wndControlPanel_MouseDown(sender As Object, e As MouseEventArgs) Handles wndControlPanel.MouseDown
If e.Button = Windows.Forms.MouseButtons.Left Then
' Get the new position
@@ -192,12 +225,16 @@ Public Class PrgSetup
End If
If pageInt = 0 Then
Back_Button.Enabled = False
+ backBox.Visible = False
+ Label1.Left = 8
Else
Back_Button.Enabled = True
+ backBox.Visible = True
+ Label1.Left = 54
End If
End Sub
- Private Sub Back_Button_Click(sender As Object, e As EventArgs) Handles Back_Button.Click
+ Private Sub Back_Button_Click(sender As Object, e As EventArgs) Handles Back_Button.Click, backBox.Click
pageInt -= 1
Select Case pageInt
Case 0
@@ -263,8 +300,12 @@ Public Class PrgSetup
End If
If pageInt = 0 Then
Back_Button.Enabled = False
+ backBox.Visible = False
+ Label1.Left = 8
Else
Back_Button.Enabled = True
+ backBox.Visible = True
+ Label1.Left = 54
End If
End Sub
@@ -282,6 +323,8 @@ Public Class PrgSetup
TextBox2.Text = Environment.GetFolderPath(Environment.SpecialFolder.Windows) & "\Logs\DISM\DISM.log"
MainForm.LogFile = TextBox2.Text
+ Next_Button.Left = 998
+
' Set color modes
If MainForm.BackColor = Color.FromArgb(48, 48, 48) Then
BodyPanelContainer.BackColor = Color.FromArgb(48, 48, 48)
diff --git a/Panels/Get_Ops/AppxPkgs/GetAppxPkgInfo.vb b/Panels/Get_Ops/AppxPkgs/GetAppxPkgInfo.vb
index 31a67181..8a3574db 100644
--- a/Panels/Get_Ops/AppxPkgs/GetAppxPkgInfo.vb
+++ b/Panels/Get_Ops/AppxPkgs/GetAppxPkgInfo.vb
@@ -340,6 +340,7 @@ Public Class GetAppxPkgInfoDlg
ImgInfoSaveDlg.ImgMountDir = If(Not MainForm.OnlineManagement, MainForm.MountDir, "")
ImgInfoSaveDlg.SaveTarget = MainForm.ImgInfoSFD.FileName
ImgInfoSaveDlg.OnlineMode = MainForm.OnlineManagement
+ ImgInfoSaveDlg.OfflineMode = MainForm.OfflineManagement
ImgInfoSaveDlg.SaveTask = 5
ImgInfoSaveDlg.ShowDialog()
End If
diff --git a/Panels/Get_Ops/Capabilities/GetCapabilityInfo.vb b/Panels/Get_Ops/Capabilities/GetCapabilityInfo.vb
index f7739065..7b72cbd1 100644
--- a/Panels/Get_Ops/Capabilities/GetCapabilityInfo.vb
+++ b/Panels/Get_Ops/Capabilities/GetCapabilityInfo.vb
@@ -319,6 +319,7 @@ Public Class GetCapabilityInfoDlg
ImgInfoSaveDlg.ImgMountDir = If(Not MainForm.OnlineManagement, MainForm.MountDir, "")
ImgInfoSaveDlg.SaveTarget = MainForm.ImgInfoSFD.FileName
ImgInfoSaveDlg.OnlineMode = MainForm.OnlineManagement
+ ImgInfoSaveDlg.OfflineMode = MainForm.OfflineManagement
ImgInfoSaveDlg.SaveTask = 6
ImgInfoSaveDlg.ShowDialog()
End If
diff --git a/Panels/Get_Ops/Drivers/GetDriverInfo.vb b/Panels/Get_Ops/Drivers/GetDriverInfo.vb
index 7fa1e56e..4d3d00e9 100644
--- a/Panels/Get_Ops/Drivers/GetDriverInfo.vb
+++ b/Panels/Get_Ops/Drivers/GetDriverInfo.vb
@@ -875,6 +875,7 @@ Public Class GetDriverInfo
ImgInfoSaveDlg.SaveTarget = MainForm.ImgInfoSFD.FileName
ImgInfoSaveDlg.ImgMountDir = If(Not MainForm.OnlineManagement, MainForm.MountDir, "")
ImgInfoSaveDlg.OnlineMode = MainForm.OnlineManagement
+ ImgInfoSaveDlg.OfflineMode = MainForm.OfflineManagement
ImgInfoSaveDlg.AllDrivers = MainForm.AllDrivers
ImgInfoSaveDlg.SaveTask = If(InfoFromDrvPackagesPanel.Visible, 8, 7)
If InfoFromDrvPackagesPanel.Visible Then
diff --git a/Panels/Get_Ops/Features/GetFeatureInfo.vb b/Panels/Get_Ops/Features/GetFeatureInfo.vb
index 30bc0c6b..2bd46070 100644
--- a/Panels/Get_Ops/Features/GetFeatureInfo.vb
+++ b/Panels/Get_Ops/Features/GetFeatureInfo.vb
@@ -321,6 +321,7 @@ Public Class GetFeatureInfoDlg
ImgInfoSaveDlg.ImgMountDir = If(Not MainForm.OnlineManagement, MainForm.MountDir, "")
ImgInfoSaveDlg.SaveTarget = MainForm.ImgInfoSFD.FileName
ImgInfoSaveDlg.OnlineMode = MainForm.OnlineManagement
+ ImgInfoSaveDlg.OfflineMode = MainForm.OfflineManagement
ImgInfoSaveDlg.SaveTask = 4
ImgInfoSaveDlg.ShowDialog()
End If
diff --git a/Panels/Get_Ops/GetImgInfoDlg.vb b/Panels/Get_Ops/GetImgInfoDlg.vb
index 341eef18..8126b697 100644
--- a/Panels/Get_Ops/GetImgInfoDlg.vb
+++ b/Panels/Get_Ops/GetImgInfoDlg.vb
@@ -584,6 +584,7 @@ Public Class GetImgInfoDlg
ImgInfoSaveDlg.SourceImage = SelectedImageFile
ImgInfoSaveDlg.SaveTarget = MainForm.ImgInfoSFD.FileName
ImgInfoSaveDlg.OnlineMode = False
+ ImgInfoSaveDlg.OfflineMode = False
ImgInfoSaveDlg.SaveTask = 1
ImgInfoSaveDlg.ShowDialog()
End If
diff --git a/Panels/Get_Ops/InfoSave/ImgInfoSaveDlg.vb b/Panels/Get_Ops/InfoSave/ImgInfoSaveDlg.vb
index f72f49ba..99d01bdd 100644
--- a/Panels/Get_Ops/InfoSave/ImgInfoSaveDlg.vb
+++ b/Panels/Get_Ops/InfoSave/ImgInfoSaveDlg.vb
@@ -29,6 +29,7 @@ Public Class ImgInfoSaveDlg
Public ImgMountDir As String
Public OnlineMode As Boolean
+ Public OfflineMode As Boolean
Public AllDrivers As Boolean
@@ -61,6 +62,11 @@ Public Class ImgInfoSaveDlg
" - Boot point (mount point): " & Path.GetPathRoot(Environment.GetFolderPath(Environment.SpecialFolder.Windows)) & CrLf & _
" - Version: " & Environment.OSVersion.Version.Major & "." & Environment.OSVersion.Version.Minor & "." & Environment.OSVersion.Version.Build & "." & FileVersionInfo.GetVersionInfo(Environment.GetFolderPath(Environment.SpecialFolder.Windows) & "\system32\ntoskrnl.exe").ProductPrivatePart & CrLf & CrLf
Exit Sub
+ ElseIf OfflineMode Then
+ Contents &= " Offline installation information:" & CrLf & _
+ " - Boot point (mount point): " & ImgMountDir & CrLf & _
+ " - Version: " & FileVersionInfo.GetVersionInfo(ImgMountDir & "\Windows\system32\ntoskrnl.exe").ProductVersion.ToString() & CrLf & CrLf
+ Exit Sub
End If
Contents &= " - Image file to get information from: " & If(SourceImage <> "" And Not OnlineMode, Quote & SourceImage & Quote, "")
Debug.WriteLine("[GetImageInformation] Starting task...")
@@ -1495,7 +1501,7 @@ Public Class ImgInfoSaveDlg
Case 3
msg = "Obtention des informations des matériels cibles en cours... (cible " & drvInfoCollection.IndexOf(hwTarget) + 1 & " de " & drvInfoCollection.Count & ")"
End Select
- ReportChanges(msg, (DriverPkgs.IndexOf(drvPkg) / DriverPkgs.Count) * 100)
+ ReportChanges(msg, (DriverPkgs.IndexOf(drvPkg) / DriverPkgs.Count) * 100 + (drvInfoCollection.IndexOf(hwTarget) + 1) / drvInfoCollection.Count * 100 / DriverPkgs.Count)
Contents &= " - Hardware description: " & hwTarget.HardwareDescription & CrLf & _
" - Hardware ID: " & hwTarget.HardwareId & CrLf & _
" - Additional IDs:" & CrLf & _
@@ -1608,7 +1614,8 @@ Public Class ImgInfoSaveDlg
End Select
ReportChanges(msg, 75)
regKey = Registry.LocalMachine.OpenSubKey("PE_SYS\ControlSet001\Services\FBWF", False)
- Contents &= " - Scratch space: " & regKey.GetValue("WinPECacheThreshold", "could not get value").ToString() & " MB" & CrLf & CrLf
+ Dim scSize As String = regKey.GetValue("WinPECacheThreshold", "").ToString()
+ Contents &= " - Scratch space: " & If(Not scSize = "", scSize & " MB", "could not get value") & CrLf & CrLf
regKey.Close()
Catch ex As Exception
@@ -1769,6 +1776,8 @@ Public Class ImgInfoSaveDlg
" - Processes started at: " & Date.Now & CrLf & _
" - Report file target: " & Quote & SaveTarget & Quote & CrLf
+ If OfflineMode Then SourceImage = ImgMountDir
+
' Begin performing operations
Select Case SaveTask
Case 0
@@ -1813,6 +1822,27 @@ Public Class ImgInfoSaveDlg
Contents &= " - Processes ended at: " & Date.Now & CrLf & CrLf & _
" We have ended. Have a nice day!"
+ ' Inform user that we are saving the file
+ Dim saveMsg As String = ""
+ Select Case MainForm.Language
+ Case 0
+ Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName
+ Case "ENU", "ENG"
+ saveMsg = "Saving contents..."
+ Case "ESN"
+ saveMsg = "Guardando contenidos..."
+ Case "FRA"
+ saveMsg = "Sauvegarde des contenus en cours..."
+ End Select
+ Case 1
+ saveMsg = "Saving contents..."
+ Case 2
+ saveMsg = "Guardando contenidos..."
+ Case 3
+ saveMsg = "Sauvegarde des contenus en cours..."
+ End Select
+ ReportChanges(saveMsg, ProgressBar1.Maximum)
+
' Save the file
If Contents <> "" And File.Exists(SaveTarget) Then File.WriteAllText(SaveTarget, Contents, UTF8)
If Debugger.IsAttached Then Process.Start(SaveTarget) Else InfoSaveResults.Show()
diff --git a/Panels/Get_Ops/WinPE/GetWinPESettings.vb b/Panels/Get_Ops/WinPE/GetWinPESettings.vb
index a55aa39b..8226feda 100644
--- a/Panels/Get_Ops/WinPE/GetWinPESettings.vb
+++ b/Panels/Get_Ops/WinPE/GetWinPESettings.vb
@@ -80,7 +80,8 @@ Public Class GetWinPESettings
Label5.Text = regKey.GetValue("InstRoot", msg).ToString()
regKey.Close()
regKey = Registry.LocalMachine.OpenSubKey("PE_SYS\ControlSet001\Services\FBWF", False)
- Label6.Text = regKey.GetValue("WinPECacheThreshold", msg).ToString() & " MB"
+ Dim scSize As String = regKey.GetValue("WinPECacheThreshold","").ToString()
+ Label6.Text = If(Not scSize = "", scSize & " MB", msg)
regKey.Close()
Catch ex As Exception
diff --git a/Panels/Img_Ops/ApplicationDriveSpecifier.Designer.vb b/Panels/Img_Ops/ApplicationDriveSpecifier.Designer.vb
index 68df05fa..e587c9c3 100644
--- a/Panels/Img_Ops/ApplicationDriveSpecifier.Designer.vb
+++ b/Panels/Img_Ops/ApplicationDriveSpecifier.Designer.vb
@@ -29,6 +29,11 @@ Partial Class ApplicationDriveSpecifier
Me.TextBox1 = New System.Windows.Forms.TextBox()
Me.Label2 = New System.Windows.Forms.Label()
Me.Button2 = New System.Windows.Forms.Button()
+ Me.ListView1 = New System.Windows.Forms.ListView()
+ Me.ColumnHeader1 = CType(New System.Windows.Forms.ColumnHeader(), System.Windows.Forms.ColumnHeader)
+ Me.ColumnHeader2 = CType(New System.Windows.Forms.ColumnHeader(), System.Windows.Forms.ColumnHeader)
+ Me.ColumnHeader3 = CType(New System.Windows.Forms.ColumnHeader(), System.Windows.Forms.ColumnHeader)
+ Me.ColumnHeader4 = CType(New System.Windows.Forms.ColumnHeader(), System.Windows.Forms.ColumnHeader)
Me.TableLayoutPanel1.SuspendLayout()
Me.SuspendLayout()
'
@@ -81,6 +86,7 @@ Partial Class ApplicationDriveSpecifier
Me.RichTextBox1.Size = New System.Drawing.Size(919, 350)
Me.RichTextBox1.TabIndex = 1
Me.RichTextBox1.Text = ""
+ Me.RichTextBox1.Visible = False
Me.RichTextBox1.WordWrap = False
'
'TextBox1
@@ -89,6 +95,7 @@ Partial Class ApplicationDriveSpecifier
Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
Me.TextBox1.Location = New System.Drawing.Point(235, 369)
Me.TextBox1.Name = "TextBox1"
+ Me.TextBox1.ReadOnly = True
Me.TextBox1.Size = New System.Drawing.Size(616, 21)
Me.TextBox1.TabIndex = 3
Me.TextBox1.Text = "\\.\"
@@ -112,6 +119,40 @@ Partial Class ApplicationDriveSpecifier
Me.Button2.Text = "Refresh"
Me.Button2.UseVisualStyleBackColor = True
'
+ 'ListView1
+ '
+ Me.ListView1.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.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(13, 13)
+ Me.ListView1.Name = "ListView1"
+ Me.ListView1.Size = New System.Drawing.Size(919, 349)
+ Me.ListView1.TabIndex = 5
+ Me.ListView1.UseCompatibleStateImageBehavior = False
+ Me.ListView1.View = System.Windows.Forms.View.Details
+ '
+ 'ColumnHeader1
+ '
+ Me.ColumnHeader1.Text = "Device ID"
+ Me.ColumnHeader1.Width = 246
+ '
+ 'ColumnHeader2
+ '
+ Me.ColumnHeader2.Text = "Model"
+ Me.ColumnHeader2.Width = 347
+ '
+ 'ColumnHeader3
+ '
+ Me.ColumnHeader3.Text = "Partitions"
+ Me.ColumnHeader3.Width = 127
+ '
+ 'ColumnHeader4
+ '
+ Me.ColumnHeader4.Text = "Size"
+ Me.ColumnHeader4.Width = 179
+ '
'ApplicationDriveSpecifier
'
Me.AcceptButton = Me.OK_Button
@@ -119,6 +160,7 @@ Partial Class ApplicationDriveSpecifier
Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font
Me.CancelButton = Me.Cancel_Button
Me.ClientSize = New System.Drawing.Size(944, 441)
+ Me.Controls.Add(Me.ListView1)
Me.Controls.Add(Me.Button2)
Me.Controls.Add(Me.TextBox1)
Me.Controls.Add(Me.Label2)
@@ -144,5 +186,10 @@ Partial Class ApplicationDriveSpecifier
Friend WithEvents TextBox1 As System.Windows.Forms.TextBox
Friend WithEvents Label2 As System.Windows.Forms.Label
Friend WithEvents Button2 As System.Windows.Forms.Button
+ Friend WithEvents ListView1 As System.Windows.Forms.ListView
+ Friend WithEvents ColumnHeader1 As System.Windows.Forms.ColumnHeader
+ Friend WithEvents ColumnHeader2 As System.Windows.Forms.ColumnHeader
+ Friend WithEvents ColumnHeader3 As System.Windows.Forms.ColumnHeader
+ Friend WithEvents ColumnHeader4 As System.Windows.Forms.ColumnHeader
End Class
diff --git a/Panels/Img_Ops/ApplicationDriveSpecifier.vb b/Panels/Img_Ops/ApplicationDriveSpecifier.vb
index b8082cc1..06ffacb1 100644
--- a/Panels/Img_Ops/ApplicationDriveSpecifier.vb
+++ b/Panels/Img_Ops/ApplicationDriveSpecifier.vb
@@ -3,33 +3,14 @@ Imports System.IO
Imports Microsoft.VisualBasic.ControlChars
Imports System.Text.Encoding
Imports System.Threading
+Imports System.Management
Public Class ApplicationDriveSpecifier
Private Sub OK_Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles OK_Button.Click
- If RichTextBox1.Text.Contains(TextBox1.Text) Then
- ImgApply.TextBox3.Text = TextBox1.Text
- Me.DialogResult = System.Windows.Forms.DialogResult.OK
- Me.Close()
- Else
- Select Case MainForm.Language
- Case 0
- Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName
- Case "ENU", "ENG"
- MsgBox("The specified Drive ID does not exist. Please specify an existing Drive ID and try again. You can also refresh the list if you've just plugged or unplugged external drives", MsgBoxStyle.Critical, "Destination drive")
- Case "ESN"
- MsgBox("El ID del disco especificado no existe. Especifique un ID de disco existente e inténtelo de nuevo. También puede actualizar la lista si acaba de conectar o desconectar discos externos", MsgBoxStyle.Critical, "Disco de destino")
- Case "FRA"
- MsgBox("L'ID de disque spécifié n'existe pas. Veuillez spécifier un ID de disque existant et réessayer. Vous pouvez également actualiser la liste si vous venez de brancher ou de débrancher des disques externes.", MsgBoxStyle.Critical, "Disque de destination")
- End Select
- Case 1
- MsgBox("The specified Drive ID does not exist. Please specify an existing Drive ID and try again. You can also refresh the list if you've just plugged or unplugged external drives", MsgBoxStyle.Critical, "Destination drive")
- Case 2
- MsgBox("El ID del disco especificado no existe. Especifique un ID de disco existente e inténtelo de nuevo. También puede actualizar la lista si acaba de conectar o desconectar discos externos", MsgBoxStyle.Critical, "Disco de destino")
- Case 3
- MsgBox("L'ID de disque spécifié n'existe pas. Veuillez spécifier un ID de disque existant et réessayer. Vous pouvez également actualiser la liste si vous venez de brancher ou de débrancher des disques externes.", MsgBoxStyle.Critical, "Disque de destination")
- End Select
- End If
+ ImgApply.TextBox3.Text = TextBox1.Text
+ Me.DialogResult = System.Windows.Forms.DialogResult.OK
+ Me.Close()
End Sub
Private Sub Cancel_Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Cancel_Button.Click
@@ -37,6 +18,15 @@ Public Class ApplicationDriveSpecifier
Me.Close()
End Sub
+ Sub ListDisks()
+ ListView1.Items.Clear()
+ Dim searcher As ManagementObjectSearcher = New ManagementObjectSearcher("SELECT DeviceID, Model, Partitions, Size FROM Win32_DiskDrive")
+ Dim dskResults As ManagementObjectCollection = searcher.Get()
+ For Each result As ManagementObject In dskResults
+ ListView1.Items.Add(New ListViewItem(New String() {result("DeviceID"), result("Model"), result("Partitions"), result("Size")}))
+ Next
+ End Sub
+
Private Sub ApplicationDriveSpecifier_Load(sender As Object, e As EventArgs) Handles MyBase.Load
Select Case MainForm.Language
Case 0
@@ -47,18 +37,30 @@ Public Class ApplicationDriveSpecifier
Button2.Text = "Refresh"
OK_Button.Text = "OK"
Cancel_Button.Text = "Cancel"
+ ListView1.Columns(0).Text = "Device ID"
+ ListView1.Columns(1).Text = "Model"
+ ListView1.Columns(2).Text = "Partitions"
+ ListView1.Columns(3).Text = "Size"
Case "ESN"
Text = "Especificar disco de destino..."
Label2.Text = "ID de disco (\\.\PHYSICALDRIVE(n)):"
Button2.Text = "Actualizar"
OK_Button.Text = "Aceptar"
Cancel_Button.Text = "Cancelar"
+ ListView1.Columns(0).Text = "ID de dispositivo"
+ ListView1.Columns(1).Text = "Modelo"
+ ListView1.Columns(2).Text = "Particiones"
+ ListView1.Columns(3).Text = "Tamaño"
Case "FRA"
Text = "Spécifier le disque cible..."
Label2.Text = "ID de disque de destination (\\.\PHYSICALDRIVE(n)):"
Button2.Text = "Rafraîchir"
OK_Button.Text = "OK"
Cancel_Button.Text = "Annuler"
+ ListView1.Columns(0).Text = "ID de l'appareil"
+ ListView1.Columns(1).Text = "Modèle"
+ ListView1.Columns(2).Text = "Partitions"
+ ListView1.Columns(3).Text = "Taille"
End Select
Case 1
Text = "Specify target disk..."
@@ -66,18 +68,30 @@ Public Class ApplicationDriveSpecifier
Button2.Text = "Refresh"
OK_Button.Text = "OK"
Cancel_Button.Text = "Cancel"
+ ListView1.Columns(0).Text = "Device ID"
+ ListView1.Columns(1).Text = "Model"
+ ListView1.Columns(2).Text = "Partitions"
+ ListView1.Columns(3).Text = "Size"
Case 2
Text = "Especificar disco de destino..."
Label2.Text = "ID de disco (\\.\PHYSICALDRIVE(n)):"
Button2.Text = "Actualizar"
OK_Button.Text = "Aceptar"
Cancel_Button.Text = "Cancelar"
+ ListView1.Columns(0).Text = "ID de dispositivo"
+ ListView1.Columns(1).Text = "Modelo"
+ ListView1.Columns(2).Text = "Particiones"
+ ListView1.Columns(3).Text = "Tamaño"
Case 3
Text = "Spécifier le disque cible..."
Label2.Text = "ID de disque de destination (\\.\PHYSICALDRIVE(n)):"
Button2.Text = "Rafraîchir"
OK_Button.Text = "OK"
Cancel_Button.Text = "Annuler"
+ ListView1.Columns(0).Text = "ID de l'appareil"
+ ListView1.Columns(1).Text = "Modèle"
+ ListView1.Columns(2).Text = "Partitions"
+ ListView1.Columns(3).Text = "Taille"
End Select
If MainForm.BackColor = Color.FromArgb(48, 48, 48) Then
BackColor = Color.FromArgb(31, 31, 31)
@@ -92,31 +106,23 @@ Public Class ApplicationDriveSpecifier
End If
TextBox1.ForeColor = ForeColor
RichTextBox1.ForeColor = ForeColor
- Dim WmicProc As Process = Process.Start(Environment.GetFolderPath(Environment.SpecialFolder.Windows) & "\system32\cmd.exe", "/c .\bin\dthelper.bat /drinfo")
- WmicProc.WaitForExit()
- Try
- RichTextBox1.Text = File.ReadAllText(Application.StartupPath & "\wmic")
- File.Delete(Application.StartupPath & "\wmic")
- Catch ex As Exception
-
- End Try
+ ListView1.BackColor = BackColor
+ ListView1.ForeColor = ForeColor
Dim handle As IntPtr = MainForm.GetWindowHandle(Me)
If MainForm.IsWindowsVersionOrGreater(10, 0, 18362) Then MainForm.EnableDarkTitleBar(handle, MainForm.BackColor = Color.FromArgb(48, 48, 48))
+ ListDisks()
BringToFront()
End Sub
Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
- Dim WmicProc As Process = Process.Start(Environment.GetFolderPath(Environment.SpecialFolder.Windows) & "\system32\cmd.exe", "/c .\bin\dthelper.bat /drinfo")
- WmicProc.WaitForExit()
- Try
- RichTextBox1.Text = File.ReadAllText(Application.StartupPath & "\wmic")
- File.Delete(Application.StartupPath & "\wmic")
- Catch ex As Exception
-
- End Try
+ ListDisks()
End Sub
Private Sub RichTextBox1_LinkClicked(sender As Object, e As LinkClickedEventArgs) Handles RichTextBox1.LinkClicked
TextBox1.Text = e.LinkText
End Sub
+
+ Private Sub ListView1_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ListView1.SelectedIndexChanged
+ TextBox1.Text = ListView1.FocusedItem.SubItems(0).Text
+ End Sub
End Class
diff --git a/README.md b/README.md
index d823b1d9..7228d099 100644
--- a/README.md
+++ b/README.md
@@ -100,7 +100,7 @@ If you want to contribute to this project, you can do so in many ways:
We continue the development of the next version in the Preview branch. To go to it, select "dt_preview" from the branch list. Commits are done every day, and new builds are released every Sunday.
-However, if you want to download the latest release AS SOON AS the project is built with new changes, you can download the [nightly installer](https://github.com/CodingWonders/DISMTools/raw/dt_pre_23113/Installer/Output/dt_setup.exe).
+However, if you want to download the latest release AS SOON AS the project is built with new changes, you can download the [nightly installer](https://github.com/CodingWonders/DISMTools/raw/dt_pre_23114/Installer/Output/dt_setup.exe).
## Stay in touch
diff --git a/Resources/FirstUse/backbox.png b/Resources/FirstUse/backbox.png
new file mode 100644
index 00000000..747ea2eb
Binary files /dev/null and b/Resources/FirstUse/backbox.png differ
diff --git a/Resources/FirstUse/backbox_down.png b/Resources/FirstUse/backbox_down.png
new file mode 100644
index 00000000..e1a04b45
Binary files /dev/null and b/Resources/FirstUse/backbox_down.png differ
diff --git a/Resources/FirstUse/backbox_focus.png b/Resources/FirstUse/backbox_focus.png
new file mode 100644
index 00000000..c493599b
Binary files /dev/null and b/Resources/FirstUse/backbox_focus.png differ
diff --git a/Updater/DISMTools-UCS/update-bin/preview.ini b/Updater/DISMTools-UCS/update-bin/preview.ini
index c2d943ca..0ba04944 100644
--- a/Updater/DISMTools-UCS/update-bin/preview.ini
+++ b/Updater/DISMTools-UCS/update-bin/preview.ini
@@ -1,6 +1,6 @@
[Version]
-LatestVer = 0.4.0.23112
-ReleaseTag = v0.4_pre_23112
+LatestVer = 0.4.0.23113
+ReleaseTag = v0.4_pre_23113
[Options]
MigrateSettings = False
\ No newline at end of file
diff --git a/Updater/DISMTools-UCS/update-bin/update.exe b/Updater/DISMTools-UCS/update-bin/update.exe
index 2fc53e82..201697b1 100644
Binary files a/Updater/DISMTools-UCS/update-bin/update.exe and b/Updater/DISMTools-UCS/update-bin/update.exe differ
diff --git a/Updater/DISMTools-UCS/verinfo/preview.ini b/Updater/DISMTools-UCS/verinfo/preview.ini
index c2d943ca..0ba04944 100644
--- a/Updater/DISMTools-UCS/verinfo/preview.ini
+++ b/Updater/DISMTools-UCS/verinfo/preview.ini
@@ -1,6 +1,6 @@
[Version]
-LatestVer = 0.4.0.23112
-ReleaseTag = v0.4_pre_23112
+LatestVer = 0.4.0.23113
+ReleaseTag = v0.4_pre_23113
[Options]
MigrateSettings = False
\ No newline at end of file