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