Как я могу установить пространство выполнения кода PowerShell, который я запускаю из C#?
У меня есть приложение, которое запускает несколько скриптов Powershell. (Это в основном приложение-оболочка, которое извлекает некоторые сценарии PS, хранящиеся в базе данных SQL, а затем запускает их.)
Один из сценариев Powershell, который я добавил, сейчас не работает, и у меня есть ощущение, что он должен работать в состоянии квартиры STA. Тем не менее, я не знаю, как установить квартиру в C#.
Я использую следующую функцию:
public bool RunSomePowershell(string script)
{
using (PowerShell PowerShellInstance = PowerShell.Create())
{
PowerShellInstance.AddScript(script);
var result = PowerShellInstance.Invoke();
return Convert.ToBoolean(result[result.Count -1].ToString()); // Result should be last output from script (true or false)
}
}
Как я могу установить это для запуска сценариев в режиме STA?
1 ответ
Решение
Сначала создайте пространство выполнения и установите ApartmentState
имущество:
using System.Threading;
using System.Management.Automation.Runspaces;
// ...
Runspace rs = RunspaceFactory.CreateRunspace();
rs.ApartmentState = ApartmentState.STA;
Затем установите Runspace
собственность PowerShell
Например, использовать вышеупомянутое пространство выполнения:
PowerShellInstance.Runspace = rs;