- build-windows.ps1: one-command Flutter build + Inno Setup installer pipeline - install.ps1: manual Windows installer (registry, shortcuts, file associations) - uninstall.ps1: clean removal script - docs/windows-setup.md: Windows dev environment setup guide - docs/index.md: updated with new files
159 lines
5.4 KiB
PowerShell
159 lines
5.4 KiB
PowerShell
#Requires -Version 5.1
|
||
<#
|
||
.SYNOPSIS
|
||
ImajViewer Windows kaldirma scripti
|
||
|
||
.DESCRIPTION
|
||
ImajViewer'i Windows sistemden tamamen kaldirir:
|
||
- Kurulum dizinini siler
|
||
- Registry'den uninstall girdisini siler
|
||
- Start Menu kisayolu silinir
|
||
- Dosya association'lar temizlenir
|
||
|
||
.PARAMETER InstallDir
|
||
Kurulum dizini. Belirtilmezse registry'den okunur.
|
||
|
||
.PARAMETER SkipConfirm
|
||
Onay sorusunu atlar (CI/otomasyon icin)
|
||
|
||
.EXAMPLE
|
||
.\uninstall.ps1
|
||
.\uninstall.ps1 --install-dir "C:\Program Files\ImajViewer"
|
||
.\uninstall.ps1 -SkipConfirm
|
||
#>
|
||
|
||
param(
|
||
[string]$InstallDir = "",
|
||
[switch]$SkipConfirm
|
||
)
|
||
|
||
# Renkli cikti
|
||
function Write-Step { param([string]$Msg) Write-Host "`n> $Msg" -ForegroundColor Cyan }
|
||
function Write-Ok { param([string]$Msg) Write-Host " [OK] $Msg" -ForegroundColor Green }
|
||
function Write-Err { param([string]$Msg) Write-Host " [X] $Msg" -ForegroundColor Red; exit 1 }
|
||
function Write-Warn { param([string]$Msg) Write-Host " [!] $Msg" -ForegroundColor Yellow }
|
||
|
||
$ErrorActionPreference = 'Stop'
|
||
$ProjectRoot = Split-Path -Parent $MyInvocation.MyCommand.Path
|
||
$AppName = "ImajViewer"
|
||
$AppExe = "imajviewer.exe"
|
||
$UninstallGuid = "B8F4A3D2-1C5E-4A7B-9D0F-6E2C8A1B3D5F"
|
||
|
||
# ── Kurulum dizinini bul ─────────────────────────────────
|
||
if (-not $InstallDir) {
|
||
# Registry'den oku
|
||
$regPaths = @(
|
||
"HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall\$UninstallGuid",
|
||
"HKCU:\Software\Microsoft\Windows\CurrentVersion\Uninstall\$UninstallGuid"
|
||
)
|
||
foreach ($rp in $regPaths) {
|
||
if (Test-Path $rp) {
|
||
$InstallDir = (Get-ItemProperty -Path $rp).InstallLocation
|
||
break
|
||
}
|
||
}
|
||
}
|
||
|
||
if (-not $InstallDir -or -not (Test-Path $InstallDir)) {
|
||
# Varsayilan dizinleri kontrol et
|
||
$defaultPaths = @(
|
||
Join-Path ${env:ProgramFiles(x86)} $AppName,
|
||
Join-Path $env:ProgramFiles $AppName,
|
||
Join-Path $env:LOCALAPPDATA $AppName
|
||
)
|
||
foreach ($dp in $defaultPaths) {
|
||
if (Test-Path (Join-Path $dp $AppExe)) {
|
||
$InstallDir = $dp
|
||
break
|
||
}
|
||
}
|
||
}
|
||
|
||
if (-not $InstallDir) {
|
||
Write-Err "$AppName kurulumu bulunamadi. Manuel olarak kaldirmak icin Ayarlar > Uygulamalar kullanin."
|
||
}
|
||
|
||
Write-Host "=" * 60 -ForegroundColor White
|
||
Write-Host " ImajViewer Kaldirma" -ForegroundColor White
|
||
Write-Host "=" * 60 -ForegroundColor White
|
||
Write-Host " Install Dir : $InstallDir" -ForegroundColor Gray
|
||
Write-Host ""
|
||
|
||
# ── Onay ─────────────────────────────────────────────────
|
||
if (-not $SkipConfirm) {
|
||
$answer = Read-Host " Tum $AppName dosyalari ve ayarlari silinecek. Devam etmek istiyor musunuz? (E/H)"
|
||
if ($answer -ne 'E' -and $answer -ne 'e') {
|
||
Write-Host " Kaldirma iptal edildi." -ForegroundColor Yellow
|
||
exit 0
|
||
}
|
||
}
|
||
|
||
# ── Surucu olan process'leri kapat ───────────────────────
|
||
Write-Step "$AppExe process'leri kontrol ediliyor..."
|
||
$processes = Get-Process -Name (Split-Path $AppExe -Leaf) -ErrorAction SilentlyContinue
|
||
if ($processes) {
|
||
foreach ($p in $processes) {
|
||
Write-Host " Kapaniyor: $($p.Id) ($($p.Path))" -ForegroundColor Yellow
|
||
$p | Stop-Process -Force -ErrorAction SilentlyContinue
|
||
}
|
||
Start-Sleep -Seconds 1
|
||
}
|
||
Write-Ok "Process kontrolu tamam"
|
||
|
||
# ── Kurulum dizinini sil ─────────────────────────────────
|
||
Write-Step "Kurulum dizini siliniyor..."
|
||
if (Test-Path $InstallDir) {
|
||
Remove-Item -Path $InstallDir -Recurse -Force
|
||
Write-Ok "$InstallDir silindi"
|
||
}
|
||
|
||
# ── Registry: Uninstall girdisi ─────────────────────────
|
||
Write-Step "Registry girdileri temizleniyor..."
|
||
|
||
$regPaths = @(
|
||
"HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall\$UninstallGuid",
|
||
"HKCU:\Software\Microsoft\Windows\CurrentVersion\Uninstall\$UninstallGuid"
|
||
)
|
||
foreach ($rp in $regPaths) {
|
||
if (Test-Path $rp) {
|
||
Remove-Item -Path $rp -Recurse -Force
|
||
Write-Ok "Registry silindi: $rp"
|
||
}
|
||
}
|
||
|
||
# Applications registry girdisi
|
||
$appRegKey = "HKCU:\Software\Classes\Applications\$AppExe"
|
||
if (Test-Path $appRegKey) {
|
||
Remove-Item -Path $appRegKey -Recurse -Force
|
||
Write-Ok "Applications registry girdisi silindi"
|
||
}
|
||
|
||
# ── Kisayollari sil ─────────────────────────────────────
|
||
Write-Step "Kisayollar siliniyor..."
|
||
|
||
$startMenuPaths = @(
|
||
Join-Path $env:APPDATA "Microsoft\Windows\Start Menu\Programs",
|
||
[Environment]::GetFolderPath("CommonPrograms")
|
||
)
|
||
foreach ($sm in $startMenuPaths) {
|
||
$lnk = Join-Path $sm "$AppName.lnk"
|
||
if (Test-Path $lnk) {
|
||
Remove-Item $lnk -Force
|
||
Write-Ok "Start Menu kisayolu silindi: $lnk"
|
||
}
|
||
}
|
||
|
||
$desktop = [Environment]::GetFolderPath("Desktop")
|
||
$desktopLnk = Join-Path $desktop "$AppName.lnk"
|
||
if (Test-Path $desktopLnk) {
|
||
Remove-Item $desktopLnk -Force
|
||
Write-Ok "Masaustu kisayolu silindi: $desktopLnk"
|
||
}
|
||
|
||
# ── Tamamlandı ──────────────────────────────────────────
|
||
Write-Host ""
|
||
Write-Host ("=" * 60) -ForegroundColor Green
|
||
Write-Host " $AppName basariyla kaldirildi!" -ForegroundColor Green
|
||
Write-Host ("=" * 60) -ForegroundColor Green
|
||
Write-Host ""
|