Я наблюдаю странное поведение с эталонным тестом, который работал годами. Тест предназначен для Autodesk Revit, который может использовать файлы журнала для автоматизации задач и времени ведения журнала. Тест будет читать файл XML для серии файлов модульного журнала, которые могут обрабатываться в различных последовательностях в зависимости от того, какие функции Revit нужно тестировать. В результате Revit запускается с разными журналами и закрывается по завершении каждого журнала для повторного запуска со следующим журналом. Я использовал Start-Process
с опцией -wait
в al oop вот так ...
$exitCode = (Start-Process -FilePath:$executable -argumentList:"`"$journalFile`"" -wait -errorAction:stop -PassThru).ExitCode
В последнее время происходили ОЧЕНЬ длинные паузы между завершением и закрытием журнала. Revit и управление возвращаются в PowerShell, чтобы можно было запустить следующий журнал. Например, иногда 3-5 минут, что становится проблемой, когда нужно обработать 10 разных файлов журнала. Похоже, это происходит только в Windows 10, но я еще не смог проверить, ограничено ли это определенной сборкой c, или все Windows 10 ведут себя таким образом.
I нашли некоторые ссылки на Start-Process -wait
, являющиеся проблемными c, поэтому я начал искать альтернативы.
Сначала я попробовал ...
$process = Start-Process -FilePath:$executable -argumentList:"`"$journalFile`""
Wait-Process $process
Но на самом деле это не похоже Подождите. Revit запускается несколько раз параллельно, и поскольку каждый журнал иногда зависит от файлов, созданных в предыдущих, это не удается. Итак, я нашел ссылку на использование [System.Diagnostics.ProcessStartInfo]
вот так ...
$processInfo = New-Object System.Diagnostics.ProcessStartInfo
$processInfo.RedirectStandardError = $true
$processInfo.RedirectStandardOutput = $true
$processInfo.UseShellExecute = $false
$process = New-Object System.Diagnostics.Process
с этим в l oop ...
$processInfo.FileName = $executable
$processInfo.Arguments = "`"$journalFile`""
$process.StartInfo = $processInfo
[Void]$process.Start()
$process.WaitForExit()
exitCode = $process.ExitCode
Кажется, это решает подождите, но в результате Revit не сможет обработать один конкретный журнал, всегда в одном и том же месте. Но это не имеет смысла, поскольку я предполагаю, что Revit может не знать, как он был запущен.
Есть ли у кого-нибудь предложения по поводу того, что я могу делать не так с любым из этих подходов, или третьего варианта, который Я должен попробовать? И есть ли у кого-нибудь информация solid о том, что "не так" с Start-Process -wait
?