| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788 |
- param(
- [switch]$RunBuild
- )
- # Post-build helper for Windows:
- # - optionally runs the tauri windows build when -RunBuild is passed
- # - finds the generated release EXE and copies it to a Chinese-named exe alongside the original
- Set-StrictMode -Version Latest
- $repoRoot = Split-Path -Parent $MyInvocation.MyCommand.Path
- Set-Location $repoRoot
- if ($RunBuild) {
- Write-Output "Running npm install and tauri windows build..."
- npm install
- npm run tauri:build:windows
- }
- $possibleDirs = @(
- "$repoRoot\src-tauri\target\release",
- "$repoRoot\src-tauri\target\x86_64-pc-windows-msvc\release",
- "$repoRoot\src-tauri\target\x86_64-pc-windows-msvc\release\bundle\nsis"
- )
- $foundExe = $null
- $foundDir = $null
- foreach ($dir in $possibleDirs) {
- if (-not (Test-Path $dir)) { continue }
- $candidate = Get-ChildItem -Path $dir -Filter *.exe -File -Recurse -ErrorAction SilentlyContinue |
- Where-Object { $_.Name -notmatch 'setup|bundle|uninstaller' } |
- Sort-Object LastWriteTime -Descending |
- Select-Object -First 1
- if ($candidate) {
- $foundExe = $candidate
- $foundDir = $dir
- break
- }
- }
- if (-not $foundExe) {
- Write-Error "No executable (.exe) found in any of: `n$($possibleDirs -join "`n")"
- Exit 1
- }
- $destName = 'BUFF选品-STEAM扫货(游铛铛).exe'
- $tauriConf = Join-Path $repoRoot 'src-tauri\tauri.conf.json'
- $productName = $null
- if (Test-Path $tauriConf) {
- try {
- $json = Get-Content -Path $tauriConf -Raw | ConvertFrom-Json -ErrorAction Stop
- if ($json.package -and $json.package.productName) {
- $productName = $json.package.productName
- }
- } catch {
- Write-Warning "Failed to read tauri.conf.json: $($_.Exception.Message)"
- }
- }
- if (-not $productName) {
- $productName = $foundExe.BaseName
- }
- # Sanitize filename: remove characters invalid in Windows filenames
- $invalidChars = [System.IO.Path]::GetInvalidFileNameChars()
- $sanitized = $productName
- foreach ($c in $invalidChars) {
- $sanitized = $sanitized -replace [regex]::Escape($c), '-'
- }
- # Ensure .exe extension
- if (-not $sanitized.ToLower().EndsWith('.exe')) {
- $sanitized = "$sanitized.exe"
- }
- $destPath = Join-Path $foundDir $sanitized
- Try {
- Copy-Item -Path $foundExe.FullName -Destination $destPath -Force
- Write-Output "Copied '$($foundExe.Name)' -> '$sanitized' in $foundDir"
- } Catch {
- Write-Error "Failed to copy exe: $($_.Exception.Message)"
- Exit 1
- }
- Exit 0
|