Windows App 開發命令列介面參考

這很重要

Windows 應用程式開發 CLI 目前處於 公開預覽。 功能與指令可能會在最終版本前有所變動。

本頁記錄了所有可用的 winapp CLI 指令。

全域選項

所有指令都支援以下全域選項:

Option 說明
--verbose-v 啟用詳細日誌記錄輸出
--quiet-q 抑制進度訊息
--help-h 顯示指令求助

全域快取目錄

WinApp 建立一個目錄來快取可在多個專案間共享的檔案。 根據預設,這會是 $UserProfile/.winapp

若要使用不同位置,請設定 WINAPP_CLI_CACHE_DIRECTORY 環境變數:

$env:WINAPP_CLI_CACHE_DIRECTORY = "d:\temp\.winapp"

設定指令

初始化

用 Windows SDK、Windows App SDK,和現代 Windows 開發所需的資產來初始化目錄。

winapp init [base-directory] [options]

引數:

Argument 說明
base-directory 應用程式/工作區的基礎/根目錄(預設:目前目錄)

選項

Option 說明
--config-dir <path> 目錄用以讀取/儲存設定(預設:目前目錄)
--setup-sdks SDK 安裝模式: stable (預設)、 previewexperimentalnone
--ignore-config--no-config 不要用設定檔來管理版本
--no-gitignore 不要更新 .gitignore 檔案
--use-defaults--no-prompt 不要顯示任何提示,並對所有提示使用預設設定
--config-only 只處理設定檔操作,跳過套件安裝

它的用途:

  • 建立 winapp.yaml 設定檔
  • 下載 Windows SDK 及 Windows App SDK 套件
  • 產生 C++/WinRT 標頭與二進位檔
  • 建立 AppxManifest.xml
  • 建立建置工具並啟用開發者模式
  • 更新 .gitignore 以排除產生的檔案

自動 .NET 專案偵測:

當目標目錄中發現 .csproj 檔案時,init 會使用簡化的 .NET 特定流程:

  • 驗證並將 TargetFramework 更新為 Windows 相容的 TFM(例如 net10.0-windows10.0.26100.0
  • Microsoft.WindowsAppSDKMicrosoft.Windows.SDK.BuildTools直接添加為.csproj中的NuGetPackageReference條目
  • 產生appxmanifest.xml、資產和開發證書
  • 不會建立winapp.yaml或下載 C++ 投影(用於 dotnet restore NuGet 套件)

範例:

# Initialize current directory
winapp init

# Initialize with experimental packages
winapp init --setup-sdks experimental

# Initialize specific directory without prompts
winapp init ./my-project --use-defaults

# Initialize a .NET project (auto-detected from .csproj)
cd my-dotnet-app
winapp init

小提示

如果你執行了init--setup-sdks none,且之後需要 SDK,請重新執行winapp init --use-defaults --setup-sdks stable。 這樣可以保留現有檔案(清單等)。

回復

還原套件並根據現有 winapp.yaml 設定重新產生檔案。

winapp restore [options]

選項

Option 說明
--config-dir <path> 包含 winapp.yaml 的目錄(預設:目前目錄)

它的用途:

  • 讀取現有 winapp.yaml 配置
  • 下載/更新 SDK 套件至指定版本
  • 重新產生 C++/WinRT 標頭與二進位檔

備註

對於以 winapp init 初始化的.NET專案,則沒有 winapp.yaml。 請使用 dotnet restore 來還原 NuGet 套件。

範例:

# Restore from winapp.yaml in current directory
winapp restore

更新

將套件更新到最新版本並更新設定檔。

winapp update [options]

選項

Option 說明
--config-dir <path> 包含 winapp.yaml 的目錄(預設:目前目錄)
--setup-sdks SDK 安裝模式: stable (預設)、 previewexperimentalnone

它的用途:

  • 讀取現有 winapp.yaml 配置
  • 將所有套件更新至最新版本
  • 更新 winapp.yaml 檔案並加入新的版本號
  • 重新產生 C++/WinRT 標頭與二進位檔

範例:

# Update packages to latest versions
winapp update

# Update including experimental packages
winapp update --setup-sdks experimental

封裝指令

pack

從準備好的應用程式目錄建立 MSIX 套件。 需要 appxmanifest.xml 檔案存在於目標目錄、目前目錄中,或隨 --manifest 選項傳送。

winapp pack <input-folder> [options]

引數:

Argument 說明
input-folder 包含要打包的應用程式檔案的目錄

選項

Option 說明
--output <filename> 輸出 MSIX 檔案名稱(預設: <name>.msix
--name <name> 套件名稱(預設:來自清單)
--manifest <path> AppxManifest.xml 的路徑(預設:自動檢測)
--cert <path> 簽署憑證路徑(啟用自動簽署)
--cert-password <password> 憑證密碼(預設:「password」)
--generate-cert 產生新的開發證書
--install-cert 將憑證安裝到機器
--publisher <name> 憑證產生的 Publisher 名稱
--self-contained 捆綁 Windows App SDK 運行時緒
--skip-pri 跳過 PRI 檔案產生
--executable <path> 相對於輸入資料夾的執行檔路徑。 用來解析 $targetnametoken$ 清單中的佔位符。

它的用途:

  • 驗證並處理檔案 AppxManifest.xml
  • 解析 $placeholder$ 清單中的標記(參見 清單佔位符
  • 確保適當的框架相依性
  • 清單與登記並列更新
  • 處理自包含式 Windows App SDK 部署
  • 如果有證書,請提供標誌套件

範例:

# Package directory with auto-detected manifest
winapp pack ./dist

# Package with custom output name and certificate
winapp pack ./dist --output MyApp.msix --cert ./cert.pfx

# Package with generated and installed certificate and self-contained runtime
winapp pack ./dist --generate-cert --install-cert --self-contained

# Package with explicit executable
winapp pack ./dist --executable MyApp.exe

建立除錯識別

建立應用程式身份,用於除錯時使用外部 位置/稀疏封裝,無需完整 MSIX 封裝。

winapp create-debug-identity [entrypoint] [options]

引數:

Argument 說明
entrypoint 可執行檔(.exe)或需要識別的腳本路徑

選項

Option 說明
--manifest <path> 通往 AppxManifest.xml 的路徑(預設: ./appxmanifest.xml
--no-install 建立套件後不要安裝
--keep-identity 保持 manifest 的原樣身份,但不要在套件名稱和應用程式 ID 上附加 .debug

它的用途:

  • 修改可執行檔的並排清單
  • 註冊稀疏套件以用於身份認證
  • 啟用偵錯需身分驗證的 API

範例:

# Add identity to executable using local manifest
winapp create-debug-identity ./bin/MyApp.exe

# Add identity with custom manifest location
winapp create-debug-identity ./dist/app.exe --manifest ./custom-manifest.xml

manifest 指令

manifest 生成

從範本產生 AppxManifest.xml。

winapp manifest generate [directory] [options]

引數:

Argument 說明
directory 產生清單的目錄(預設:目前目錄)

選項

Option 說明
--package-name <name> 套件名稱(預設:資料夾名稱)
--publisher-name <name> Publisher CN(預設:CN=<current user>
--version <version> 版本(預設:「1.0.0.0」)
--description <text> 說明(預設:「我的申請」)
--entrypoint <path> 入口點可執行檔或腳本
--template <type> 範本類型: packaged (預設)或 sparse
--logo-path <path> Logo 影像檔案的路徑
--if-exists <Error\|Overwrite\|Skip> 如果檔案已經存在,預設操作為:錯誤

範本:

顯現佔位符

生成清單使用以美元符號分隔的 $placeholder$ 標記,在打包時會自動解析:

預留位置 決心 範例
$targetnametoken$ 無副檔名的可執行檔名稱 Executable="$targetnametoken$.exe" 變成 Executable="MyApp.exe"
$targetentrypoint$ Windows.FullTrustApplication 總是自動解決

占位符的解決方式:

  • winapp pack可透過--executable選項來解析$targetnametoken$,或在輸入資料夾中自動偵測單一.exe項目。
  • winapp create-debug-identity 在提供時,從入口論點中解析出 $targetnametoken$
  • winapp manifest generate --executable 從可執行檔中擷取元資料,但會 $targetnametoken$.exe 保留在清單中以便日後解決。

小提示

$targetnametoken$ 保留在已簽入的清單中,可以避免硬編碼執行檔名稱,且同時適用於 winapp pack 和 Visual Studio 建置。

範例:

# Generate standard manifest interactively
winapp manifest generate

# Generate with all options specified
winapp manifest generate ./src --package-name MyApp --publisher-name "CN=My Company" --if-exists overwrite

清單更新資產

從單一來源映像產生所有必要的 MSIX 映像資產。

winapp manifest update-assets <image-path> [options]

引數:

Argument 說明
image-path 來源圖片檔(PNG、JPG、GIF 等)的路徑

選項

Option 說明
--manifest <path> AppxManifest.xml 檔案路徑(預設:搜尋目前目錄)

它會取得單一來源影像,並自動以正確尺寸產生所有 12 個所需的 MSIX 影像資產。 資產會儲存到相對於清單位置的 Assets 目錄中。

範例:

# Generate assets with auto-detected manifest
winapp manifest update-assets mylogo.png

# Specify manifest location explicitly
winapp manifest update-assets mylogo.png --manifest ./dist/appxmanifest.xml

憑證與簽署指令

證書生成

產生用於套件簽署的開發憑證。

winapp cert generate [options]

選項

Option 說明
--manifest <appxmanifest.xml> 從 appxmanifest.xml中提取publisher資訊
--publisher <name> 憑證的發行者名稱
--output <path> 輸出憑證檔案路徑
--password <password> 憑證密碼(預設:「password」)
--valid-days <days> 證書有效天數(預設:365)
--install 生成之後將憑證安裝到本地機器儲存
--if-exists <Error\|Overwrite\|Skip> 如果憑證檔案已經存在,行為(預設:錯誤)

憑證安裝

將憑證安裝到機器憑證儲存庫。

winapp cert install <cert-path>

引數:

Argument 說明
cert-path 安裝憑證檔案的路徑

範例:

# Generate certificate for specific publisher
winapp cert generate --publisher "CN=My Company" --output ./mycert.pfx

# Install certificate to machine
winapp cert install ./mycert.pfx

標記

用憑證簽署 MSIX 套件和執行檔。

winapp sign <file-path> [options]

引數:

Argument 說明
file-path 在 MSIX 套件或可執行檔中進行簽署的路徑

選項

Option 說明
--cert <path> 簽署憑證的路徑
--cert-password <password> 憑證密碼(預設:「password」)

範例:

# Sign MSIX package
winapp sign MyApp.msix --cert ./mycert.pfx

# Sign executable
winapp sign ./bin/MyApp.exe --cert ./mycert.pfx --cert-password mypassword

實用指令

工具

直接使用 Windows SDK 工具。 使用 Microsoft.Windows.SDK.BuildTools中可用的工具。

winapp tool <tool-name> [tool-arguments]

可用工具:

  • makeappx - 建立與操作應用程式套件
  • signtool - 簽署檔案並驗證簽名
  • mt - 並排組裝組態工具
  • 以及 Microsoft.Windows.SDK.BuildTools 的其他 Windows SDK 工具

範例:

# Use signtool to verify signature
winapp tool signtool verify /pa MyApp.msix

儲存

執行 Microsoft Store 開發者 CLI 指令。 此指令會下載Microsoft Store開發者CLI(如果尚未下載)。 欲了解更多,請參閱 Microsoft Store 開發者 CLI

winapp store [args...]

引數:

Argument 說明
args... 直接傳給 msstore CLI 的參數

範例:

# List all apps in your Microsoft Partner Center account
winapp store app list

# Publish a package to the Microsoft Store
winapp store publish ./myapp.msix --appId <your-app-id>

get-winapp-path(取得 Windows 應用程式路徑)

取得已安裝的 Windows SDK 元件的路徑。

winapp get-winapp-path [options]

傳回.winapp工作區目錄的路徑、套件安裝目錄及生成的標頭檔位置。


Node.js/Electron 指令

這些指令僅在 NPM 套件中提供。

節點創建外掛

產生帶有 Windows SDK 和 Windows App SDK 整合的原生 C++ 或 C# 附加元件範本。

npx winapp node create-addon [options]

選項

Option 說明
--name <name> 外掛名稱(預設:「nativeWindowsAddon」)
--template 選擇外掛類型: cscpp (預設: cpp
--verbose 啟用冗長輸出

它的用途:

  • 建立帶有範本檔案的附加目錄
  • 產生 binding.gyp 及帶有 Windows SDK 範例的附加檔案
  • 安裝所需 npm 依賴
  • 新增建置腳本指令到 package.json

範例:

# Generate addon with default name
npx winapp node create-addon

# Generate custom named C# addon
npx winapp node create-addon --name myWindowsAddon --template cs

節點添加electorn調試標識

透過使用稀疏封裝,將應用程式身份加入 Electron 的開發流程。 需要一個 appxmanifest.xml(使用winapp initwinapp manifest generate建立一個)。

這很重要

Electron 應用程式封裝稀疏時有已知問題,會導致應用程式啟動時當機或無法渲染網頁內容。 這個問題在 Windows 上已經修正,但還沒擴散到所有裝置。 你可以在 Electron 應用程式中使用--no-sandbox 標誌來關閉沙盒,作為一種解法。 此問題不影響完整的 MSIX 封裝。

要解除 Electron 偵錯身份,請使用 winapp node clear-electron-debug-identity

npx winapp node add-electron-debug-identity [options]

選項

Option 說明
--manifest <path> 自訂 appxmanifest.xml 路徑(預設:目前目錄中的 appxmanifest.xml)
--no-install 請勿安裝或修改相依性;僅設定 Electron 除錯身份
--keep-identity 保持清單識別不變,勿附加 .debug
--verbose 啟用冗長輸出

範例:

# Add identity to Electron development process
npx winapp node add-electron-debug-identity

# Use a custom manifest file
npx winapp node add-electron-debug-identity --manifest ./custom/appxmanifest.xml

節點 清除 Electron 偵錯身份情報

透過從備份中還原原始的 electron.exe,移除 Electron 除錯程序中的套件身分識別。

npx winapp node clear-electron-debug-identity [options]

選項

Option 說明
--verbose 啟用冗長輸出

範例:

# Remove identity from Electron development process
npx winapp node clear-electron-debug-identity