Understanding how brLanch works
This commit is contained in:
@@ -137,10 +137,21 @@ function Install-ADTDeployment
|
|||||||
|
|
||||||
$CurrentPDFLocal = 'HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.pdf\UserChoice'
|
$CurrentPDFLocal = 'HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.pdf\UserChoice'
|
||||||
$CurrentPDF = (Get-ItemProperty $CurrentPDFLocal -ErrorAction SilentlyContinue).ProgId
|
$CurrentPDF = (Get-ItemProperty $CurrentPDFLocal -ErrorAction SilentlyContinue).ProgId
|
||||||
if ($CurrentPDF) {"ProgID: $p"}
|
if ($CurrentPDF) {
|
||||||
else { "No association set" }
|
Write-ADTLogEntry -Message ("Detected current PDF ProgID: {0}" -f $CurrentPDF) -Severity 1
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
Write-ADTLogEntry -Message 'No current PDF association set' -Severity 2
|
||||||
|
}
|
||||||
|
|
||||||
Show-ADTInstallationPrompt -Message 'The current default PDF appliction is '$p'' -ButtonRightText 'Yes' -ButtonLeftText 'No'
|
# Show current default (friendly name if known) in interactive mode
|
||||||
|
try {
|
||||||
|
$currentFriendly = if ($CurrentPDF -and $PDFMap.ContainsKey($CurrentPDF)) { $PDFMap[$CurrentPDF] } else { $CurrentPDF }
|
||||||
|
if ($adtSession.DeployMode -eq 'Interactive') {
|
||||||
|
$msgFriendly = if ([string]::IsNullOrWhiteSpace($currentFriendly)) { 'Unknown' } else { $currentFriendly }
|
||||||
|
Show-ADTInstallationPrompt -Message ("Current default PDF application: {0}" -f $msgFriendly) -ButtonRightText 'OK'
|
||||||
|
}
|
||||||
|
} catch { Write-ADTLogEntry -Message ("Failed to show current default prompt: {0}" -f $_) -Severity 2 }
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -154,7 +165,7 @@ function Install-ADTDeployment
|
|||||||
|
|
||||||
function Get-InstalledPDFProgIDs {
|
function Get-InstalledPDFProgIDs {
|
||||||
$installed = @()
|
$installed = @()
|
||||||
foreach ($progId in $friendlyMap.Keys) { if (Is-ProgIDPresent $progId) { $installed += $progId } }
|
foreach ($progId in $PDFMap.Keys) { if (Is-ProgIDPresent $progId) { $installed += $progId } }
|
||||||
return $installed
|
return $installed
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -168,12 +179,100 @@ function Install-ADTDeployment
|
|||||||
} catch { return "Error" }
|
} catch { return "Error" }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function Select-PDFProgId {
|
||||||
|
param(
|
||||||
|
[string[]]$Candidates,
|
||||||
|
[string]$Current
|
||||||
|
)
|
||||||
|
# If not interactive, prefer current; otherwise present a simple selection UI.
|
||||||
|
if ($adtSession.DeployMode -ne 'Interactive') { return $Current }
|
||||||
|
|
||||||
|
try {
|
||||||
|
Add-Type -AssemblyName System.Windows.Forms | Out-Null
|
||||||
|
Add-Type -AssemblyName System.Drawing | Out-Null
|
||||||
|
|
||||||
|
$form = New-Object System.Windows.Forms.Form
|
||||||
|
$form.Text = 'Select Default PDF Handler'
|
||||||
|
$form.StartPosition = 'CenterScreen'
|
||||||
|
$form.Width = 520
|
||||||
|
$form.Height = 180
|
||||||
|
$form.Topmost = $true
|
||||||
|
|
||||||
|
$label = New-Object System.Windows.Forms.Label
|
||||||
|
$label.AutoSize = $true
|
||||||
|
$label.Text = 'Choose the application to handle .pdf files:'
|
||||||
|
$label.Location = New-Object System.Drawing.Point(12, 12)
|
||||||
|
$form.Controls.Add($label)
|
||||||
|
|
||||||
|
$combo = New-Object System.Windows.Forms.ComboBox
|
||||||
|
$combo.DropDownStyle = 'DropDownList'
|
||||||
|
$combo.Width = 480
|
||||||
|
$combo.Location = New-Object System.Drawing.Point(12, 40)
|
||||||
|
|
||||||
|
# Build display list of "Friendly (ProgID)"
|
||||||
|
$items = @()
|
||||||
|
foreach ($pid in $Candidates) {
|
||||||
|
$friendly = if ($PDFMap.ContainsKey($pid)) { $PDFMap[$pid] } else { $pid }
|
||||||
|
$items += ("{0} ({1})" -f $friendly, $pid)
|
||||||
|
}
|
||||||
|
$combo.Items.AddRange($items)
|
||||||
|
|
||||||
|
if ($Current -and $Candidates -contains $Current) {
|
||||||
|
$friendlyCur = if ($PDFMap.ContainsKey($Current)) { $PDFMap[$Current] } else { $Current }
|
||||||
|
$displayCur = ("{0} ({1})" -f $friendlyCur, $Current)
|
||||||
|
$combo.SelectedItem = $displayCur
|
||||||
|
} elseif ($combo.Items.Count -gt 0) {
|
||||||
|
$combo.SelectedIndex = 0
|
||||||
|
}
|
||||||
|
$form.Controls.Add($combo)
|
||||||
|
|
||||||
|
$ok = New-Object System.Windows.Forms.Button
|
||||||
|
$ok.Text = 'OK'
|
||||||
|
$ok.Width = 80
|
||||||
|
$ok.Location = New-Object System.Drawing.Point(332, 80)
|
||||||
|
$ok.DialogResult = [System.Windows.Forms.DialogResult]::OK
|
||||||
|
$form.AcceptButton = $ok
|
||||||
|
$form.Controls.Add($ok)
|
||||||
|
|
||||||
|
$cancel = New-Object System.Windows.Forms.Button
|
||||||
|
$cancel.Text = 'Cancel'
|
||||||
|
$cancel.Width = 80
|
||||||
|
$cancel.Location = New-Object System.Drawing.Point(412, 80)
|
||||||
|
$cancel.DialogResult = [System.Windows.Forms.DialogResult]::Cancel
|
||||||
|
$form.CancelButton = $cancel
|
||||||
|
$form.Controls.Add($cancel)
|
||||||
|
|
||||||
|
$result = $form.ShowDialog()
|
||||||
|
if ($result -ne [System.Windows.Forms.DialogResult]::OK) { return $Current }
|
||||||
|
|
||||||
|
$selection = [string]$combo.SelectedItem
|
||||||
|
if (-not $selection) { return $Current }
|
||||||
|
# Extract ProgID from "Name (ProgID)"
|
||||||
|
$m = [regex]::Match($selection, '\(([^)]+)\)$')
|
||||||
|
if ($m.Success) { return $m.Groups[1].Value } else { return $Current }
|
||||||
|
} catch {
|
||||||
|
Write-ADTLogEntry -Message ("Selection UI failed: {0}" -f $_) -Severity 2
|
||||||
|
return $Current
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
##================================================
|
##================================================
|
||||||
## MARK: Install
|
## MARK: Install
|
||||||
##================================================
|
##================================================
|
||||||
$adtSession.InstallPhase = $adtSession.DeploymentType
|
$adtSession.InstallPhase = $adtSession.DeploymentType
|
||||||
|
|
||||||
Start-ADTProcessAsUser -FilePath "C:\ProgramData\SetUserFTA\SetUserFTA.exe" -ArgumentList '/S' -SuccessExitCodes 0, 500
|
# Determine desired ProgID and set association via SetUserFTA
|
||||||
|
$installedProgIds = Get-InstalledPDFProgIDs
|
||||||
|
$currentProgId = Get-CurrentPDFHandler
|
||||||
|
$targetProgId = Select-PDFProgId -Candidates $installedProgIds -Current $currentProgId
|
||||||
|
|
||||||
|
if ($targetProgId -and $targetProgId -ne 'Unknown' -and $targetProgId -ne 'Error') {
|
||||||
|
$args = ".pdf $targetProgId"
|
||||||
|
Write-ADTLogEntry -Message ("Setting .pdf handler to {0}" -f $targetProgId) -Severity 1
|
||||||
|
Start-ADTProcessAsUser -FilePath "C:\ProgramData\SetUserFTA\SetUserFTA.exe" -ArgumentList $args -SuccessExitCodes 0, 500
|
||||||
|
} else {
|
||||||
|
Write-ADTLogEntry -Message 'Skipping SetUserFTA: no valid target ProgID determined' -Severity 2
|
||||||
|
}
|
||||||
|
|
||||||
##================================================
|
##================================================
|
||||||
## MARK: Post-Install
|
## MARK: Post-Install
|
||||||
|
|||||||
Reference in New Issue
Block a user