【问题标题】:Performing action while process is running in rust with GetExitCodeProcess in rust在 rust 中使用 GetExitCodeProcess 在 rust 中运行进程时执行操作
【发布时间】:2022-11-26 19:39:37
【问题描述】:

您好,我的目标是在进程运行时循环执行某些操作。 下面的代码假定我已经有一个有效的进程句柄。

我的第一次尝试是:

let mut exit:u32 = 0;
while GetExitCodeProcess(h_process, exit as *mut u32).as_bool(){
}

认为这可能有效,因为此函数的 GitHub 文档说第二个参数是 lpexitcode: *mut u32,但是此代码会导致 STATUS_ACCESS_VIOLATION 错误。

现在我确实让它工作了,因为我记得我遇到过的类似问题的解决方案。工作代码:

 let mut exit: [u32; 1] = [0; 1];
 while GetExitCodeProcess(h_process, exit.as_mut_ptr().cast()).as_bool() && exit[0] == 259 {}

我现在的问题是,我真的不明白为什么第一次尝试没有成功,而第二次尝试成功了。谁能向我解释一下,有没有更好的方法将 exit 存储在数组中?我还在 win 文档中看到,如果进程仍在运行,c++ 函数会将退出设置为 STILL_ACTIVE。为什么它在 rust 函数中不一样,因为 STILL_ACTIVE 也可以在 rust Crate 中找到。

【问题讨论】:

  • &mut exit as *mut u32

标签: windows winapi rust


【解决方案1】:

首先,您的示例中缺少很多代码。 GetExitCodeProcess 不是原生 Rust 函数,它肯定需要一些库和围绕它的 unsafe

也就是说,正如@IInspectable 所提到的,您可能需要传递对您的exit 值的引用而不是exit 值本身,因为GetExitCodeProcess 需要一个指向值的指针:

let mut exit:u32 = 0;
while GetExitCodeProcess(h_process, &mut exit as *mut u32).as_bool(){
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-10-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多