如何在PowerShell 7.5中创建WinUI3 GUI界面
在PowerShell 7.5(.NET 9)中手动配置WinUI3运行环境解决类未注册问题
WinUI3依赖特定的运行时初始化、COM组件注册逻辑,Visual Studio创建WinUI3项目时会自动完成这些环节,手动加载DLL时需要补全以下步骤:
1. 加载官方签名的WinUI3核心DLL
从微软官方安装路径加载兼容.NET 9的WinUI3组件,路径示例(版本号可能随更新变化):
# 加载核心XAML组件 Add-Type -Path "C:\Program Files (x86)\Windows Kits\10\ExtensionSDKs\Microsoft.UI.Xaml\2.8.4\lib\net5.0-windows10.0.19041.0\Microsoft.UI.Xaml.dll" Add-Type -Path "C:\Program Files (x86)\Windows Kits\10\ExtensionSDKs\Microsoft.UI.Xaml\2.8.4\lib\net5.0-windows10.0.19041.0\Microsoft.UI.Xaml.Controls.dll" # 加载Windows App Runtime引导组件 Add-Type -Path "C:\Program Files\WindowsApps\Microsoft.WindowsAppRuntime.1.5_1.5.240328000_x64__8wekyb3d8bbwe\Microsoft.WindowsAppRuntime.Bootstrap.dll"
2. 初始化Windows App Runtime
WinUI3依赖Windows App Runtime环境,需手动触发初始化:
[Microsoft.WindowsAppRuntime.Bootstrap]::Initialize(0) | Out-Null
3. 初始化WinUI3 XAML应用上下文
WinUI3必须先存在Application实例才能创建窗口,用未编译C#代码定义一个空的Application子类并初始化:
$appCode = @" using Microsoft.UI.Xaml; public class PSWinUIApp : Application { protected override void OnLaunched(LaunchActivatedEventArgs args) {} } "@ # 加载自定义Application类 Add-Type -TypeDefinition $appCode -ReferencedAssemblies "Microsoft.UI.Xaml.dll" # 启动XAML运行时 [PSWinUIApp]::Start([System.Action[Microsoft.UI.Xaml.LaunchActivatedEventArgs]]$null)
4. 创建并渲染窗口与按钮
现在可以正常实例化Window并添加交互元素:
# 创建窗口 $window = New-Object Microsoft.UI.Xaml.Window $window.Title = "PowerShell WinUI3 Demo" $window.Width = 400 $window.Height = 300 # 创建按钮并绑定点击事件 $button = New-Object Microsoft.UI.Xaml.Controls.Button $button.Content = "关闭窗口" $button.Add_Click({ $window.Close() }) $window.Content = $button $window.Activate()
5. 启动消息循环维持窗口运行
WinUI3窗口需要消息循环处理用户交互,手动启动循环:
$dispatcherQueue = [Microsoft.UI.Dispatching.DispatcherQueue]::GetForCurrentThread() while ($window.Visible) { $dispatcherQueue.ProcessEvents([Microsoft.UI.Dispatching.DispatcherQueueProcessingMode]::ProcessAllEventsIfPresent) Start-Sleep -Milliseconds 10 }
关键注意事项
- 所有DLL必须从微软官方安装路径获取(如Windows Kits、WindowsApps目录),禁止使用自行编译的二进制文件
- 确保WinUI3版本、Windows App Runtime版本与.NET 9兼容
- 必须严格遵循「初始化Runtime → 初始化App上下文 → 创建窗口」的顺序
内容的提问来源于stack exchange,提问作者SpyNet
相关产品推荐
相关产品推荐

