1
0
Fork 0

feat(packaging): 설치 시 선택 외부 도구 대화형 프롬프트 + 바탕화면 바로가기 + v1.0.4.0

- Install-Everything2Everything.ps1: MSIX 설치 후 사용자에게 선택 구성요소 설치 여부를 각각 묻는다.
  FFmpeg(영상/오디오)·LibreOffice(HWP·DOCX→PDF)·Ghostscript(PDF 압축)를 winget으로 자동 설치
  (winget 없거나 실패 시 다운로드 페이지 폴백) + 바탕화면 바로가기(AppsFolder) 생성. -NoPrompt 무인 설치.
  UTF-8 BOM 저장으로 PowerShell 5.1 한글 정상 인식.
- Package.appxmanifest: Version 1.0.3.0 → 1.0.4.0 (리팩토링 반영 업그레이드 인식).
This commit is contained in:
Yun Chan 2026-06-02 18:15:04 +09:00
parent 944187c314
commit 5050551c95
2 changed files with 83 additions and 9 deletions

View file

@ -1,15 +1,18 @@
#Requires -Version 5.1
#Requires -RunAsAdministrator
# 5대 PC에서 MSIX 사이드로드 설치 — 1회 셋업 스크립트.
# MSIX 사이드로드 설치 — 1회 셋업 스크립트.
# 흐름: 인증서 신뢰 → MSIX 설치 → (대화형) 선택 외부 도구 + 바탕화면 바로가기.
# 사용법:
# PowerShell (관리자) > .\Install-Everything2Everything.ps1 -PfxPath .\Everything2Everything-DevCert.pfx -MsixPath .\Everything2Everything.msix
# PowerShell (관리자) > .\Install-Everything2Everything.ps1 -PfxPath .\Everything2Everything-DevCert.pfx -MsixPath .\dist\Everything2Everything-x64.msix
# 무인 설치(프롬프트 생략): ... -NoPrompt
[CmdletBinding()]
param(
[Parameter(Mandatory)] [string]$PfxPath,
[Parameter(Mandatory)] [string]$MsixPath,
[securestring]$PfxPassword,
[string]$Password = 'Everything2EverythingDev'
[string]$Password = 'Everything2EverythingDev',
[switch]$NoPrompt
)
$ErrorActionPreference = 'Stop'
@ -21,26 +24,97 @@ if (-not $PfxPassword) {
$PfxPassword = ConvertTo-SecureString -String $Password -AsPlainText -Force
}
Write-Host '[1/3] 인증서를 LocalMachine\TrustedPeople에 임포트…'
Write-Host '[1/4] 인증서를 LocalMachine\TrustedPeople에 임포트…'
$importResult = Import-PfxCertificate `
-CertStoreLocation 'Cert:\LocalMachine\TrustedPeople' `
-FilePath $PfxPath `
-Password $PfxPassword
Write-Host " Thumbprint: $($importResult.Thumbprint)"
Write-Host '[2/3] 인증서를 LocalMachine\Root에도 임포트 (체인 신뢰)…'
Write-Host '[2/4] 인증서를 LocalMachine\Root에도 임포트 (체인 신뢰)…'
Import-PfxCertificate `
-CertStoreLocation 'Cert:\LocalMachine\Root' `
-FilePath $PfxPath `
-Password $PfxPassword | Out-Null
Write-Host '[3/3] MSIX 패키지 설치…'
Write-Host '[3/4] MSIX 패키지 설치…'
Add-AppxPackage -Path $MsixPath -ForceApplicationShutdown
# ─────────────────────────────────────────────────────────────────────────────
# [4/4] 선택 구성요소 — 외부 변환 도구 + 바탕화면 바로가기 (대화형)
# 외부 도구는 해당 형식 변환에만 필요. 앱 설정(⚙)·Diagnose에서도 나중에 설치 안내를 받을 수 있음.
# ─────────────────────────────────────────────────────────────────────────────
if (-not $NoPrompt) {
Write-Host ''
Write-Host '[4/4] 선택 구성요소 설치 ─ 필요한 것만 Y를 입력하세요 (없으면 Enter)'
$hasWinget = $null -ne (Get-Command winget -ErrorAction SilentlyContinue)
if (-not $hasWinget) {
Write-Host ' ⚠️ winget을 찾지 못했습니다(Windows 11 권장). 선택 시 다운로드 페이지를 대신 엽니다.'
}
function Confirm-YesNo([string]$prompt) {
$answer = Read-Host " $prompt [Y/N]"
return ($answer -match '^\s*(y|yes|예|ㅛ)\s*$')
}
function Install-Tool([string]$name, [string]$wingetId, [string]$url) {
if ($hasWinget) {
Write-Host " → winget으로 $name 설치 중… (수 분 걸릴 수 있습니다)"
try {
& winget install --id $wingetId -e --source winget `
--accept-package-agreements --accept-source-agreements
if ($LASTEXITCODE -eq 0) {
Write-Host "$name 설치/확인 완료."
} else {
Write-Host " ⚠️ winget 실패(코드 $LASTEXITCODE). 수동 설치: $url"
}
} catch {
Write-Host " ⚠️ winget 오류($_). 수동 설치: $url"
}
} else {
Write-Host " 다운로드 페이지를 엽니다: $url"
Start-Process $url
}
}
if (Confirm-YesNo '영상·오디오 변환용 FFmpeg를 설치하시겠습니까?') {
Install-Tool 'FFmpeg' 'Gyan.FFmpeg' 'https://www.gyan.dev/ffmpeg/builds/'
}
if (Confirm-YesNo 'HWP·DOCX → PDF 변환용 LibreOffice를 설치하시겠습니까? (용량 ~350MB)') {
Install-Tool 'LibreOffice' 'TheDocumentFoundation.LibreOffice' 'https://www.libreoffice.org/download/download/'
}
if (Confirm-YesNo 'PDF 고급 압축용 Ghostscript를 설치하시겠습니까?') {
Install-Tool 'Ghostscript' 'ArtifexSoftware.GhostScript' 'https://www.ghostscript.com/releases/gsdnld.html'
}
if (Confirm-YesNo '바탕화면에 바로가기를 만들겠습니까?') {
try {
$pkg = Get-AppxPackage -Name 'Everything2Everything.YunChan' | Select-Object -First 1
if ($pkg) {
$target = "shell:AppsFolder\$($pkg.PackageFamilyName)!Everything2Everything"
$desktop = [Environment]::GetFolderPath('CommonDesktopDirectory')
$lnkPath = Join-Path $desktop 'Everything2Everything.lnk'
$wshell = New-Object -ComObject WScript.Shell
$lnk = $wshell.CreateShortcut($lnkPath)
$lnk.TargetPath = Join-Path $env:WINDIR 'explorer.exe'
$lnk.Arguments = $target
$lnk.Description = 'Everything2Everything — 모든 것을 모든 것으로 (양방향 변환)'
$lnk.Save()
Write-Host " ✅ 바탕화면 바로가기 생성: $lnkPath"
} else {
Write-Host ' ⚠️ 설치된 패키지를 찾지 못해 바로가기를 만들 수 없습니다.'
}
} catch {
Write-Host " ⚠️ 바로가기 생성 실패: $_"
}
}
}
Write-Host ''
Write-Host '✅ 설치 완료. Win11 메인 우클릭 메뉴에 "Everything2Everything으로 변환" 카스케이드가 보일 겁니다.'
Write-Host ' 서브메뉴: JPEG · PNG · WebP · PDF · TXT/DOCX(OCR) · AVIF · GIF · TIFF · BMP · 변환…'
Write-Host ' 서브메뉴: 이미지·PDF·문서·HWP·영상·오디오·데이터·벡터 변환 (입력 형식별 추천 출력).'
Write-Host ' (탐색기 재시작이 필요할 수 있음: 작업 관리자 → "Windows 탐색기" 다시 시작)'
Write-Host ''
Write-Host '⚠️ 중복 방지: Portable EXE 카스케이드를 이미 등록했다면 unregister 권장 — 메인 메뉴와 추가 옵션 메뉴에 모두 노출되는 것을 막음:'
Write-Host '⚠️ 중복 방지: Portable EXE 카스케이드를 이미 등록했다면 unregister 권장 — 메인 메뉴와 추가 옵션 메뉴 중복 노출 방지:'
Write-Host ' <publish 폴더>\Everything2Everything.exe unregister'

View file

@ -12,7 +12,7 @@
<Identity
Name="Everything2Everything.YunChan"
Publisher="CN=Everything2EverythingDev"
Version="1.0.3.0"
Version="1.0.4.0"
ProcessorArchitecture="x64" />
<Properties>