Для большинства здесь это не новость. Я просмотрел почти все сообщения отсюда и блоги. Это не ошибка.
Я не получаю никаких ошибок. Если я запускаю PowerShell локально, он работает [ожидается, что будет сделан снимок экрана], при запуске из C# скриншоты не будут.
Установлены все необходимые пакеты NuGet. using System.Management.Automation;
Я пытаюсь запустить .ps1 из c#, но не работает. Powershell делает снимок экрана и сохраняет его по указанному пути.
Локально я использую .ps1, как показано ниже, и он делает снимок экрана. Но из c# этого не происходит.
C:\source\Hooks\TestScreenCapture.ps1 -ScreenShotPath C:\source\Hooks\testy.png
Эта функция делает снимок экрана при запуске из селена.
Я написал код c# для ее запуска.
Скрипт расположен по адресу:
var psScript = Path.Combine(AppDomain.CurrentDomain.BaseDirectory.Replace("bin\\Debug\\netcoreapp3.1", "Hooks"), "TestScreenCapture.ps1");
1-й подход:
var startInfo = new ProcessStartInfo()
{
FileName = "powershell.exe",
Arguments = $"-NoProfile -ExecutionPolicy unrestricted -file \"{psScript}\" -ScreenShotPath \"{screenShotFullPath}\"",
UseShellExecute = false
};
Process.Start(startInfo);
2-й подход
var powerShell = PowerShell.Create();
powerShell
.AddScript($"\"{psScript}\"", false)
.AddParameter("ScreenShotFullPath", screenShotFullPath)
.Invoke();
3-й подход
var powerShell = PowerShell.Create();
powerShell
.AddScript(@"& {psScript} -ScreenShotFullPath {screenShotFullPath}")
.Invoke();
Я попытался запустить код PowerShell из моего C#, чтобы проверить, работает ли c# или нет, и это работает.
string criteria = "system*";
PowerShellInst.AddScript("Get-Service -DisplayName " + criteria);
Collection<PSObject> PSOutput = PowerShellInst.Invoke();
foreach (PSObject obj in PSOutput)
{
if (obj != null)
{
Console.Write(obj.Properties["Status"].Value.ToString() + " - ");
Console.WriteLine(obj.Properties["DisplayName"].Value.ToString());
}
}
Console.WriteLine("Done");
Проблемы кажутся PowerShell, чтобы сделать снимок экрана из c# не работает.