PowerShell и однопоточные апартаменты
Я разработал небольшой инструмент с графическим интерфейсом в PowerShell, используя WPK.
У меня есть следующая команда запуска
powershell -ExecutionPolicy Unrestricted -file PowerTools.ps1 -noexit -sta
Я получаю следующую ошибку.
New-Object : Exception calling ".ctor" with "0" argument(s): "The calling thread must be STA, because many UI components require this."
At \WindowsPowerShell\Modules\WPK\GeneratedControls\PresentationFramework.ps1:34
10 char:29
+ $Object = New-Object <<<< System.Windows.Window
+ CategoryInfo : InvalidOperation: (:) [New-Object], MethodInvocationException
+ FullyQualifiedErrorId : ConstructorInvokedThrowException,Microsoft.PowerShell.Commands.NewObjectCommand
Из моего Googling STA стоит "однопоточная квартира", я заметил, что у powershell.exe есть флаг "-sta", но это тоже не помогает.
Суть моего файла ps1 выглядит следующим образом
Import-Module WPK
function get-gui()
{
New-Window -WindowStartupLocation CenterScreen `
-Width 1200 -Height 200 -Show {
New-Grid -Rows 32, 32, 32, 32 -Columns 110, 200* {
...
}
}
}
}
get-gui
Любые намеки, пожалуйста?
(Я потратил довольно много времени на собственные исследования)
2 ответа
Решение
Это так просто!:) Спасибо за ваше руководство, Kayasax!
powerShell -sta -file PowerTools.ps1
https://technet.microsoft.com/en-us/library/hh847736.aspx говорит, что -file
должен быть последним в списке параметров, потому что все после имени файла интерпретируется как параметры файла. Вот почему это работает, когда -sta
указан ранее -file
, но не работает после -file
,