diff --git a/.github/workflows/release-tauri.yml b/.github/workflows/release-tauri.yml
index 2c3588c8..bd4124d5 100644
--- a/.github/workflows/release-tauri.yml
+++ b/.github/workflows/release-tauri.yml
@@ -187,6 +187,33 @@ jobs:
TAURI_SIGNING_PRIVATE_KEY_PASSWORD: ${{ secrets.TAURI_SIGNING_PRIVATE_KEY_PASSWORD }}
run: bash scripts/build-mac.sh
+ # ── Windows:先 build OpenLessIme.dll(x64+x86),再跑 tauri bundle。
+ # openless-ime.wxs 用 $(env.OPENLESS_IME_DLL_X64) / _X86 拿绝对路径,
+ # 跨 candle/light cwd 都能 resolve(Tauri wix bundler cwd 不固定)。
+ - name: Build Windows IME native DLLs
+ if: matrix.platform == 'windows-latest'
+ shell: pwsh
+ working-directory: 'openless-all/app'
+ run: |
+ $appRoot = (Resolve-Path .).Path
+ foreach ($t in @(
+ @{ Platform = 'x64'; Folder = 'x64'; EnvName = 'OPENLESS_IME_DLL_X64' },
+ @{ Platform = 'Win32'; Folder = 'x86'; EnvName = 'OPENLESS_IME_DLL_X86' }
+ )) {
+ $out = Join-Path $appRoot "src-tauri\target\windows-ime-msvc\$($t.Folder)\Release"
+ $obj = Join-Path $appRoot "src-tauri\target\windows-ime-msvc\obj\$($t.Folder)\Release"
+ ./scripts/windows-ime-build.ps1 -Configuration Release -Platform $t.Platform -OutputDirectory $out -IntermediateDirectory $obj
+ if ($LASTEXITCODE -ne 0) {
+ throw "OpenLessIme $($t.Platform) build failed with exit $LASTEXITCODE"
+ }
+ $dll = (Resolve-Path (Join-Path $out 'OpenLessIme.dll')).Path
+ if (-not (Test-Path $dll)) {
+ throw "OpenLessIme.dll not produced at $dll"
+ }
+ "$($t.EnvName)=$dll" | Out-File -FilePath $env:GITHUB_ENV -Append -Encoding utf8
+ Write-Host "[ok] built $dll (exported $($t.EnvName))"
+ }
+
# ── Windows:仅 Windows 跑通用 tauri build(Linux 用下方专用 step,避免重复构建)──
- name: Build (Windows)
if: matrix.platform == 'windows-latest'
diff --git a/openless-all/app/package-lock.json b/openless-all/app/package-lock.json
index a2085ffa..d082a3b9 100644
--- a/openless-all/app/package-lock.json
+++ b/openless-all/app/package-lock.json
@@ -1,12 +1,12 @@
{
"name": "openless-app",
- "version": "1.2.13",
+ "version": "1.2.14",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "openless-app",
- "version": "1.2.13",
+ "version": "1.2.14",
"dependencies": {
"@tauri-apps/api": "^2.1.1",
"@tauri-apps/plugin-autostart": "^2.5.1",
diff --git a/openless-all/app/package.json b/openless-all/app/package.json
index 0a243db6..efab67f3 100644
--- a/openless-all/app/package.json
+++ b/openless-all/app/package.json
@@ -1,7 +1,7 @@
{
"name": "openless-app",
"private": true,
- "version": "1.2.13",
+ "version": "1.2.14",
"type": "module",
"scripts": {
"dev": "vite",
diff --git a/openless-all/app/src-tauri/Cargo.lock b/openless-all/app/src-tauri/Cargo.lock
index cf0dc120..9e4ca497 100644
--- a/openless-all/app/src-tauri/Cargo.lock
+++ b/openless-all/app/src-tauri/Cargo.lock
@@ -3281,7 +3281,7 @@ dependencies = [
[[package]]
name = "openless"
-version = "1.2.13"
+version = "1.2.14"
dependencies = [
"anyhow",
"arboard",
diff --git a/openless-all/app/src-tauri/Cargo.toml b/openless-all/app/src-tauri/Cargo.toml
index b39e017d..5983378e 100644
--- a/openless-all/app/src-tauri/Cargo.toml
+++ b/openless-all/app/src-tauri/Cargo.toml
@@ -1,6 +1,6 @@
[package]
name = "openless"
-version = "1.2.13"
+version = "1.2.14"
description = "OpenLess — local voice input that types where your cursor is"
authors = ["OpenLess"]
edition = "2021"
diff --git a/openless-all/app/src-tauri/tauri.conf.json b/openless-all/app/src-tauri/tauri.conf.json
index d80ab3c7..30cff677 100644
--- a/openless-all/app/src-tauri/tauri.conf.json
+++ b/openless-all/app/src-tauri/tauri.conf.json
@@ -1,7 +1,7 @@
{
"$schema": "https://schema.tauri.app/config/2",
"productName": "OpenLess",
- "version": "1.2.13",
+ "version": "1.2.14",
"identifier": "com.openless.app",
"build": {
"beforeDevCommand": "npm run dev",
diff --git a/openless-all/app/src-tauri/wix/openless-ime.wxs b/openless-all/app/src-tauri/wix/openless-ime.wxs
index f7571a1b..027c22b1 100644
--- a/openless-all/app/src-tauri/wix/openless-ime.wxs
+++ b/openless-all/app/src-tauri/wix/openless-ime.wxs
@@ -5,12 +5,12 @@