gpt4 book ai didi

powershell - Autodesk Revit 的启动过程等待问题

转载 作者:行者123 更新时间:2023-12-03 01:25:58 27 4
gpt4 key购买 nike

我看到一个已经运行多年的基准有一些奇怪的行为。该基准适用于 Autodesk Revit,它可以使用日志文件来自动执行任务和记录时间。基准测试将读取一系列模块化日志文件的 XML 文件,这些文件可以根据想要进行基准测试的 Revit 功能以不同的顺序进行处理。因此,Revit 与不同的期刊一起启动,并在每个期刊完成时关闭,以便与下一个期刊一起重新启动。
我一直在使用Start-Process-wait像这样的循环中的选项...

$exitCode = (Start-Process -FilePath:$executable -argumentList:"`"$journalFile`"" -wait -errorAction:stop -PassThru).ExitCode
最近发生的事情是在日志运行到完成和关闭 Revit 和控制返回到 PowerShell 之间有很长的停顿,以便可以启动下一个日志。就像,有时 3-5 分钟,当有 10 个不同的日志文件要处理时,这会成为一个问题。这似乎只发生在 Windows 10 中,但我还无法验证它是否仅限于特定版本,或者是否所有 Windows 10 都以这种方式运行。
我发现了一些对 Start-Process -wait 的引用有问题,所以我开始寻找替代方案。
首先我试过...
$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
在循环中...
$processInfo.FileName = $executable
$processInfo.Arguments = "`"$journalFile`""
$process.StartInfo = $processInfo
[Void]$process.Start()
$process.WaitForExit()
exitCode = $process.ExitCode
这似乎解决了等待问题,但导致 Revit 无法处理始终在完全相同的位置的特定期刊。但这没有任何意义,因为我认为 Revit 可能不知道它是如何启动的。
有没有人对我可能对这些方法中的任何一种做错了什么或我应该尝试的第三种选择有任何建议?而且,有没有人有一些关于 Start-Process -wait 的“错误”的可靠信息? ?

最佳答案

如果 Start-Process-Wait参数对你不起作用(我不知道为什么会出现长时间的延迟),你确实可以使用 System.Diagnostics.Process Start-Process 的实例返回代表新创建的进程,假设您使用了 -PassThru转变:

# Simple example (Windows): launch Notepad asynchronously,
# and, thanks to -PassThru, return a System.Diagnostics.Process describing
# the newly created process.
$ps = Start-Process -PassThru Notepad
如果你想使用 Wait-Process 要等待进程退出,您有两个语法选项:
$ps | Wait-Process
或者
Wait-Process $ps.ID  # parameter -ID implied
请注意 Wait-Process $ps不起作用,因为它试图绑定(bind)到 -Name参数,导致 $ps.ToString()用作(无用的)值。
但是,您也可以使用 Process类型 .WaitForExit()直接方法:
$ps.WaitForExit()
一旦进程终止,您可以查询它的 .ExitCode属性以获取其退出代码。

关于powershell - Autodesk Revit 的启动过程等待问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62902316/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com