Powershell中FolderBrowserDialog在Shell与ISE下运行表现不一致问题
问题原因
PowerShell ISE默认以*单线程单元(STA)模式启动,而PowerShell 5.1及更早版本的默认控制台默认以多线程单元(MTA)*模式启动。你使用的System.Windows.Forms.FolderBrowserDialog依赖Windows Shell COM组件加载文件夹图标,这类COM组件仅在STA模式下能正常工作,在MTA模式下调用时就会抛出大量图标加载相关的错误,尽管核心的文件夹选择功能可能还能正常运行。
解决方法
你可以选择以下任意一种方案解决问题:
- 方案1:启动PowerShell时强制指定STA模式
打开控制台时运行命令powershell.exe -STA,再执行你的脚本即可正常运行无报错。 - 方案2:在脚本头部添加自动切换STA模式的逻辑
不需要修改启动方式,直接在你现有代码的最前面添加以下代码即可:if ([System.Threading.Thread]::CurrentThread.ApartmentState -ne 'STA') { & powershell.exe -STA -File $MyInvocation.MyCommand.Path exit } - 方案3:升级到PowerShell 7+版本
PowerShell 7及更高版本的默认控制台已经将默认启动模式改为STA,直接运行你的代码不会出现该报错。
内容的提问来源于stack exchange,提问作者adalton
相关产品推荐
相关产品推荐

