Files
openless/openless-all/app/scripts/windows-open-dev.ps1
T
Cooper OakandCooper-X-Oak ff694c07c1 fix(windows): 收敛启动和开发产物路径 (#48)
* fix(windows): 收敛启动和开发产物路径

* ci(windows): 校验运行时 smoke 脚本

---------

Co-authored-by: Cooper-X-Oak <Cooper-X-Oak@users.noreply.github.com>
2026-04-30 14:21:35 +08:00

78 lines
2.5 KiB
PowerShell

param(
[string]$ExePath = ""
)
$ErrorActionPreference = "Stop"
if ([string]::IsNullOrWhiteSpace($ExePath)) {
$appRoot = (Resolve-Path (Join-Path $PSScriptRoot "..")).Path
$ExePath = Join-Path $appRoot ".artifacts\windows-gnu\dev\openless.exe"
}
Add-Type @"
using System;
using System.Runtime.InteropServices;
public static class OpenLessWindow {
[DllImport("user32.dll")]
public static extern bool ShowWindow(IntPtr hWnd, int nCmdShow);
[DllImport("user32.dll")]
public static extern bool SetForegroundWindow(IntPtr hWnd);
}
"@
function Show-OpenLessWindow($Process) {
if ($null -eq $Process -or $Process.MainWindowHandle -eq 0) {
return $false
}
# 9 = SW_RESTORE. This restores minimized windows and leaves normal windows visible.
[OpenLessWindow]::ShowWindow($Process.MainWindowHandle, 9) | Out-Null
[OpenLessWindow]::SetForegroundWindow($Process.MainWindowHandle) | Out-Null
return $true
}
$running = Get-Process openless -ErrorAction SilentlyContinue |
Where-Object { $_.MainWindowHandle -ne 0 } |
Select-Object -First 1
if (Show-OpenLessWindow $running) {
Write-Host "OpenLess is already running; brought window to foreground. pid=$($running.Id)"
exit 0
}
if (-not (Test-Path $ExePath)) {
throw "OpenLess executable not found: $ExePath. Run scripts/windows-build-gnu.ps1 first."
}
if (-not (Test-Path (Join-Path (Split-Path $ExePath -Parent) "WebView2Loader.dll"))) {
throw "WebView2Loader.dll not found beside $ExePath. Run scripts/windows-build-gnu.ps1 again."
}
if (-not $env:SystemDrive) {
$env:SystemDrive = "C:"
}
if (-not $env:ProgramData) {
$env:ProgramData = Join-Path $env:SystemDrive "ProgramData"
}
$env:PATH = "$env:USERPROFILE\.cargo\bin;$env:USERPROFILE\scoop\persist\rustup\.cargo\bin;$env:USERPROFILE\scoop\apps\rustup\current\.cargo\bin;$env:USERPROFILE\scoop\apps\mingw\current\bin;$env:PATH"
$env:OPENLESS_SHOW_MAIN_ON_START = "1"
try {
$process = Start-Process -FilePath $ExePath -WorkingDirectory (Split-Path $ExePath -Parent) -PassThru
} finally {
Remove-Item Env:OPENLESS_SHOW_MAIN_ON_START -ErrorAction SilentlyContinue
}
$deadline = (Get-Date).AddSeconds(10)
while ((Get-Date) -lt $deadline) {
Start-Sleep -Milliseconds 250
$current = Get-Process -Id $process.Id -ErrorAction SilentlyContinue
if (Show-OpenLessWindow $current) {
Write-Host "OpenLess started and brought to foreground. pid=$($current.Id)"
exit 0
}
}
throw "OpenLess started but no main window was visible within 10 seconds. pid=$($process.Id)"