winutil/functions/public/Invoke-WPFGetIso.ps1
Chris Titus b2dc605098
Test 2024 01 25 (#1505)
* Update applications.json

Fake app add made by linux fanboy

* Compile Winutil

* Update screen-install.png (#1464)

* Compile Winutil

* Update files (#1487)

- Add detections for whether the image to be processed by MicroWin is Windows 10 or later
- Add procedure to clear the indexes ComboBox (WinForms term) every time an ISO is specified

Co-authored-by: Chris Titus <contact@christitus.com>

* Lots of changes to Invoke-WPFFixesUpdate (#1467)

* Add Guilded into Communication Tab (#1059)

* Add Guilded into Communication Tab

* Remove Choco Package due to there is no Chocolatey packages

* : Add ZeroTier One to utilities menu (#1061)

* Update applications.json (#1063)

Update to add [SuperF4 - Stefan Sundin](https://stefansundin.github.io/superf4/), as mentioned in #374 [Choco - SuperF4](https://community.chocolatey.org/packages/superf4) maintained by Xav83. [WinGet - SuperF4](https://winstall.app/apps/StefanSundin.Superf4) SuperF4 and Winget package published by Stefan Sundin.

* Update inputXML.xaml (#1062)

Updated inputXML.xaml to account for addition of the SuperF4 software.

* Added AIMP music player (#1064)

* Add Ventoy (Chocolatey Only Package) & .NET Core Runtime (Winget & Chocolatey)  (#1066)

* Tidy up SuperF4 line.

* Tidy up SuperF4 line.

Used spaces instead of tabs.

* Add dotnet 7.0.11 Desktop Runtime

* Undone changes to SuperF4 line

* Addition of Ventoy (chocolatey only) package

* Comment Spacing, Indentation, and Capitalization (#1084)

* Comment Spacing, Indentation, and Capitalization

* Comment Grammar and Spacing

Makes grammar in comments better and more consistent
Adds space before comment and centers word in `Write-Host` commands

* More Grammar and Formatting

* Add some comments

* Populate PlaceHolder comments in functions

Files I found that has issues:
Get-WinUtilRegistry.ps1
Install-WinUtilWinget.ps1
Invoke-WinUtilDarkMode.ps1
Remove-WinUtilAPPX.ps1
Test-WinUtilPackageManager.ps1
Update-WinUtilProgramWinget.ps1

Invoke-WPFUpdatessecurity.ps1

* Tweak a few more comments

* Tweak another write-host statement

* Undo Catch statement adjustment

It's outside of the scope of this pull request

* Fix indentation

* Description, Progress Bar, and nuke step 10

- Added a full description of exactly what the function does
- Replaced `Write-Host`s with multiple progress bars
  - Might've added too many, but I didn't want to add one for just a few of them as I want the user to be able to see all tasks that have been performed, just like with `Write-Host`
- Removed Step 10
  - Only applies to Windows 8

* Add Aggressive Parameter, Actually Force Check for Updates

* Add aggressive parameter and add system repair step

* Lots of changes

* Revert Stuff

This reverts commit 199a92e26e.

Revert "Comment Spacing, Indentation, and Capitalization (#1084)"

This reverts commit acc2b5b243.

Revert "Add Ventoy (Chocolatey Only Package) & .NET Core Runtime (Winget & Chocolatey)  (#1066)"

This reverts commit 932ec6a0a0.

Revert "Added AIMP music player (#1064)"

This reverts commit d1a4a67a45.

Revert "Update inputXML.xaml (#1062)"

This reverts commit 2db4cb556e.

Revert "Update applications.json (#1063)"

This reverts commit ce7edbd60d.

Revert ": Add ZeroTier One to utilities menu (#1061)"

This reverts commit 783a9657d0.

---------

Co-authored-by: Justawildwolf <62820836+blusewill@users.noreply.github.com>
Co-authored-by: Tim Stone <github@tsdev.au>
Co-authored-by: Will Barnard <5012445+mrwillbarnz@users.noreply.github.com>
Co-authored-by: Ian Bassi <ian.bassi@outlook.com>

* Compile Winutil

* Invoke-WPFRunspace argument fix (#1497)

* Compile Winutil

* Fixes, Changes & Features Added (Broken links & Comments) (#1476)

* Fixes & Changes (Broken links & Comments)

- Snappy Driver Installer Origin
Github source code deprecated. Replaced with SourceForge official source code site.

- Spacedrive File Manager
"spacedrive.org" not working. Changed to official site.
**Recent Alpha ver 0.2.0 - crashing on install for Win10+ (not tested in "lower" win versions), may be better to remove overall or place on standby.**

- Xtreme Download Manager
Web Integration not working for chromium based browser.
**Deprecated by Manifest V3, no official update release.**

* Update applications.json

Reverted winget for Spacedrive to original.

Spacedrive.FileSystem -> spacedrive.Spacedrive

* Fix for Portmaster [Wrong repo/winget]

* Choco Safing Portmaster

* Added Apps Request

- Added TeCno Account Switcher
Resolves Feature Request n.6° #1451

- Added ATLauncher
- Added OP Auto Clicker
- Added Motrix Download Manager
Resolves Feature Request #1443

* Fixed Panel Numbers

* Added Thonny Python IDE

- Feature Request
#1451

* Update applications.json

fix few missing values

* Update applications.json

add winget thonny

---------

Co-authored-by: Chris Titus <contact@christitus.com>

* Compile Winutil

* Fixed typo: latancy to latency (#1492)

* Compile Winutil

* Update inputXML.xaml (#1462)

* Compile Winutil

* Update .gitignore

* add Dax Studio program to the Development category (#1500)

* Compile Winutil

* Add GitHub CLI to applications (#1460)

* Added GitHub CLI to applications

GitHub cli is the command line interface offered by github alongside
github desktop.
For more information see: https://github.com/cli/cli.
Installation  instructions taken from: https://github.com/cli/cli#windows

* spelling: removed accidental dot

* Compile Winutil

* Add Vesktop to applications.json (#1461)

* Add Vesktop to applications.json

* fix syntax error

---------

Co-authored-by: Chris Titus <contact@christitus.com>

* Compile Winutil

* Add some apps (#1466)

* Add some apps

* Fix WPFInstallopenhashtab

---------

Co-authored-by: Chris Titus <contact@christitus.com>

* Compile Winutil

* adds helix to development tools (#1469)

* Compile Winutil

* Add tooltips to config checkboxes (#1470)

* Fix typo

* Update winutil.ps1

* Update winutil.ps1

Add tooltips to checkboxes in config session and rewrite so to make things more clear as to what each tweak does

* Revert "Update winutil.ps1"

This reverts commit aaa69c473f.

* Add applications

Added Sonarr, Radarr, Prowlarr and Bazarr in response to an github issue

* Add applications

Added applications to the GUI

* Revert "Add applications"

This reverts commit e5fba2b4eb.

* Revert "Add applications"

This reverts commit 55ff75a65c.

* Edit xaml files

Editing the xaml files so the changes persist upon compilation

---------

Co-authored-by: Chris Titus <contact@christitus.com>

* Compile Winutil

* Add Mumble (#1481)

Add Mumble to Communications category.

* Compile Winutil

* Added 'Stremio' (#1473)

* Compile Winutil

* Update applications.json

Added 'Stremio'

* Compile Winutil

---------

Co-authored-by: REVENGE977 <REVENGE977@users.noreply.github.com>
Co-authored-by: Chris Titus <contact@christitus.com>

* Add the Mullvad Browser (#1475)

* add mullvad browser

* Missing tab

* fix format

---------

Co-authored-by: Kristjan <krissiomar@gmail.com>
Co-authored-by: Chris Titus <contact@christitus.com>

* Compile Winutil

* Added some Applications (#1484)

* Update applications.json

Add:
- Rancher Desktop
- ManicTime
- qFlipper
- ModernFlyouts
- ZoomIt
- StartAllBack
- Wintoys
- Minecraft Launcher

* Update applications.json

added:
- Arduino IDE
- Whatsapp

* Update applications.json

corrected spacing

* Update applications.json

fixed winget commands

---------

Co-authored-by: Chris Titus <contact@christitus.com>

* Added WinMerge Application in Development category. (#1485)

WinMerge is an Open Source differencing and merging tool for Windows.

* Compile Winutil

* Fix few app links and add app (issues/1478) (#1495)

* Update some app links

* Update winutil.ps1

Date update

* Add Syncthingtray

Related to the issue: https://github.com/ChrisTitusTech/winutil/issues/1478

* Update applications.json

update putty link

---------

Co-authored-by: Chris Titus <contact@christitus.com>

* Compile Winutil

* Update applications.json

* Compile Winutil

* App fix and sort

* Add Dual Monitor tools to applications.json (#1504)

* Add Dual Monitor tools to applications.json

* Update applications.json

* Update applications.json

---------

Co-authored-by: Chris Titus <contact@christitus.com>

* Compile Winutil

---------

Co-authored-by: ChrisTitusTech <ChrisTitusTech@users.noreply.github.com>
Co-authored-by: Samq64 <81489795+Samq64@users.noreply.github.com>
Co-authored-by: CodingWonders <101426328+CodingWonders@users.noreply.github.com>
Co-authored-by: Carter <60557606+Carterpersall@users.noreply.github.com>
Co-authored-by: Justawildwolf <62820836+blusewill@users.noreply.github.com>
Co-authored-by: Tim Stone <github@tsdev.au>
Co-authored-by: Will Barnard <5012445+mrwillbarnz@users.noreply.github.com>
Co-authored-by: Ian Bassi <ian.bassi@outlook.com>
Co-authored-by: ogfrm <96927197+ogfrm@users.noreply.github.com>
Co-authored-by: v-Kaefer <128633407+v-Kaefer@users.noreply.github.com>
Co-authored-by: Shashank B N <117376750+Athena-2003@users.noreply.github.com>
Co-authored-by: Alex Schwartz <alexschwartz01@gmail.com>
Co-authored-by: André Gonzalez <lopescg@gmail.com>
Co-authored-by: David Hardt <contact@hardt.ai>
Co-authored-by: Choccy Milk <152878702+choccyy-milk@users.noreply.github.com>
Co-authored-by: OmriOn <omri.hermon@gmail.com>
Co-authored-by: Breno Fernandes <fernandesopa@gmail.com>
Co-authored-by: Yuri Gabriel <97139700+Yuuh15@users.noreply.github.com>
Co-authored-by: Filip Zurek <zurfil@tuta.com>
Co-authored-by: H4D3S <32039975+REVENGE977@users.noreply.github.com>
Co-authored-by: REVENGE977 <REVENGE977@users.noreply.github.com>
Co-authored-by: KristjanOmar <117899282+KristjanOmar@users.noreply.github.com>
Co-authored-by: Kristjan <krissiomar@gmail.com>
Co-authored-by: MyDrift <personal@mdiana.ch>
Co-authored-by: Akash Singh <52990376+Akash-S1999@users.noreply.github.com>
Co-authored-by: Roc Wang <rocwang911@gmail.com>
Co-authored-by: José Roberto Sánchez <jose_roberto_ss@hotmail.com>
2024-01-30 12:36:38 -06:00

162 lines
7.8 KiB
PowerShell

function Invoke-WPFGetIso {
<#
.DESCRIPTION
Function to get the path to Iso file for MicroWin, unpack that isom=, read basic information and populate the UI Options
#>
Write-Host "Invoking WPFGetIso"
if($sync.ProcessRunning){
$msg = "GetIso process is currently running."
[System.Windows.MessageBox]::Show($msg, "Winutil", [System.Windows.MessageBoxButton]::OK, [System.Windows.MessageBoxImage]::Warning)
return
}
Write-Host " _ __ __ _ "
Write-Host " /\/\ (_) ___ _ __ ___ / / /\ \ \(_) _ __ "
Write-Host " / \ | | / __|| '__| / _ \ \ \/ \/ /| || '_ \ "
Write-Host "/ /\/\ \| || (__ | | | (_) | \ /\ / | || | | | "
Write-Host "\/ \/|_| \___||_| \___/ \/ \/ |_||_| |_| "
$oscdimgPath = Join-Path $env:TEMP 'oscdimg.exe'
$oscdImgFound = [bool] (Get-Command -ErrorAction Ignore -Type Application oscdimg.exe) -or (Test-Path $oscdimgPath -PathType Leaf)
Write-Host "oscdimg.exe on system: $oscdImgFound"
if (!$oscdImgFound)
{
$downloadFromGitHub = $sync.WPFMicrowinDownloadFromGitHub.IsChecked
if (!$downloadFromGitHub)
{
# only show the message to people who did check the box to download from github, if you check the box
# you consent to downloading it, no need to show extra dialogs
[System.Windows.MessageBox]::Show("oscdimge.exe is not found on the system, winutil will now attempt do download and install it using choco. This might take a long time.")
# the step below needs choco to download oscdimg
$chocoFound = [bool] (Get-Command -ErrorAction Ignore -Type Application choco)
Write-Host "choco on system: $chocoFound"
if (!$chocoFound)
{
[System.Windows.MessageBox]::Show("choco.exe is not found on the system, you need choco to download oscdimg.exe")
return
}
Start-Process -Verb runas -FilePath powershell.exe -ArgumentList "choco install windows-adk-oscdimg"
[System.Windows.MessageBox]::Show("oscdimg is installed, now close, reopen PowerShell terminal and re-launch winutil.ps1")
return
}
else {
[System.Windows.MessageBox]::Show("oscdimge.exe is not found on the system, winutil will now attempt do download and install it from github. This might take a long time.")
Get-Oscdimg -oscdimgPath $oscdimgPath
$oscdImgFound = Test-Path $oscdimgPath -PathType Leaf
if (!$oscdImgFound) {
$msg = "oscdimg was not downloaded can not proceed"
[System.Windows.MessageBox]::Show($msg, "Winutil", [System.Windows.MessageBoxButton]::OK, [System.Windows.MessageBoxImage]::Error)
return
}
else {
Write-Host "oscdimg.exe was successfully downloaded from github"
}
}
}
[System.Reflection.Assembly]::LoadWithPartialName("System.windows.forms") | Out-Null
$openFileDialog = New-Object System.Windows.Forms.OpenFileDialog
$openFileDialog.initialDirectory = $initialDirectory
$openFileDialog.filter = "ISO files (*.iso)| *.iso"
$openFileDialog.ShowDialog() | Out-Null
$filePath = $openFileDialog.FileName
if ([string]::IsNullOrEmpty($filePath))
{
Write-Host "No ISO is chosen"
return
}
Write-Host "File path $($filePath)"
if (-not (Test-Path -Path $filePath -PathType Leaf))
{
$msg = "File you've chosen doesn't exist"
[System.Windows.MessageBox]::Show($msg, "Winutil", [System.Windows.MessageBoxButton]::OK, [System.Windows.MessageBoxImage]::Error)
return
}
try {
Write-Host "Mounting Iso. Please wait."
$mountedISO = Mount-DiskImage -PassThru "$filePath"
Write-Host "Done mounting Iso $mountedISO"
$driveLetter = (Get-Volume -DiskImage $mountedISO).DriveLetter
Write-Host "Iso mounted to '$driveLetter'"
} catch {
# @ChrisTitusTech please copy this wiki and change the link below to your copy of the wiki
Write-Error "Failed to mount the image. Error: $($_.Exception.Message)"
Write-Error "This is NOT winutil's problem, your ISO might be corrupt, or there is a problem on the system"
Write-Error "Please refer to this wiki for more details https://github.com/ChrisTitusTech/winutil/blob/main/wiki/Error-in-Winutil-MicroWin-during-ISO-mounting%2Cmd"
return
}
# storing off values in hidden fields for further steps
# there is probably a better way of doing this, I don't have time to figure this out
$sync.MicrowinIsoDrive.Text = $driveLetter
Write-Host "Setting up mount dir and scratch dirs"
$timestamp = Get-Date -Format "yyyyMMdd_HHmmss"
$randomNumber = Get-Random -Minimum 1 -Maximum 9999
$randomMicrowin = "Microwin_${timestamp}_${randomNumber}"
$randomMicrowinScratch = "MicrowinScratch_${timestamp}_${randomNumber}"
$mountDir = Join-Path $env:TEMP $randomMicrowin
$scratchDir = Join-Path $env:TEMP $randomMicrowinScratch
$sync.MicrowinMountDir.Text = $mountDir
$sync.MicrowinScratchDir.Text = $scratchDir
Write-Host "Done setting up mount dir and scratch dirs"
Write-Host "Scratch dir is $scratchDir"
Write-Host "Image dir is $mountDir"
try {
#$data = @($driveLetter, $filePath)
New-Item -ItemType Directory -Force -Path "$($mountDir)" | Out-Null
New-Item -ItemType Directory -Force -Path "$($scratchDir)" | Out-Null
Write-Host "Copying Windows image. This will take awhile, please don't use UI or cancel this step!"
# xcopy we can verify files and also not copy files that already exist, but hard to measure
# xcopy.exe /E /I /H /R /Y /J $DriveLetter":" $mountDir >$null
$totalTime = Measure-Command { Copy-Files "$($driveLetter):" $mountDir -Recurse -Force }
Write-Host "Copy complete! Total Time: $($totalTime.Minutes)m$($totalTime.Seconds)s"
$wimFile = "$mountDir\sources\install.wim"
Write-Host "Getting image information $wimFile"
if (-not (Test-Path -Path $wimFile -PathType Leaf))
{
$msg = "Install.wim file doesn't exist in the image, this could happen if you use unofficial Windows images, or a Media creation tool, which creates a final image that can not be modified. Please don't use shady images from the internet, use only official images. Here are instructions how to download ISO images if the Microsoft website is not showing the link to download and ISO. https://www.techrepublic.com/article/how-to-download-a-windows-10-iso-file-without-using-the-media-creation-tool/"
Write-Host $msg
[System.Windows.MessageBox]::Show($msg, "Winutil", [System.Windows.MessageBoxButton]::OK, [System.Windows.MessageBoxImage]::Error)
throw
}
$sync.MicrowinWindowsFlavors.Items.Clear()
Get-WindowsImage -ImagePath $wimFile | ForEach-Object {
$imageIdx = $_.ImageIndex
$imageName = $_.ImageName
$sync.MicrowinWindowsFlavors.Items.Add("$imageIdx : $imageName")
}
$sync.MicrowinWindowsFlavors.SelectedIndex = 0
Get-Volume $driveLetter | Get-DiskImage | Dismount-DiskImage
Write-Host "Selected value '$($sync.MicrowinWindowsFlavors.SelectedValue)'....."
$sync.MicrowinOptionsPanel.Visibility = 'Visible'
} catch {
Write-Host "Dismounting bad image..."
Get-Volume $driveLetter | Get-DiskImage | Dismount-DiskImage
Remove-Item -Recurse -Force "$($scratchDir)"
Remove-Item -Recurse -Force "$($mountDir)"
}
Write-Host "Done reading and unpacking ISO"
Write-Host ""
Write-Host "*********************************"
Write-Host "Check the UI for further steps!!!"
$sync.ProcessRunning = $false
}