在 SFX 存档提取时显示进度条

Posted

技术标签:

【中文标题】在 SFX 存档提取时显示进度条【英文标题】:Showing a progress bar while SFX archive is extracting 【发布时间】:2010-05-18 08:54:24 【问题描述】:

我正在使用 C++ 和本机 Win32 API 编写程序。我正在以静默模式从 SFX 存档 EXE 创建一个进程,没有向用户显示 GUI。但我想在我的应用程序中显示一个进度条,同时提取 SFX 存档。

我该怎么做?

谢谢。

【问题讨论】:

【参考方案1】:

如果您创建的过程产生了一些文本输出到标准输出,那么您可能会以某种方式解析该输出并显示进度。要知道它是否存在,请在命令行窗口中激活它并观察你从中得到什么。

win32 的CreateProcess() 允许您将进程的标准输出重定向到管道。这样您就可以在生成后立即收到输出。

如果您正在创建的流程没有以某种方式报告其进度,那么您真的无能为力。您可以尝试在文件大小和提取文件所需的平均时间之间提出函数,然后伪造一个进度条。这将有助于让用户放心,但仅此而已。

--编辑CreateProcess() 的调用会在进程创建后立即返回。 CreateProcess() 用它创建的进程的句柄填充结构 PROCESS_INFORMATION。它包含进程主线程的句柄。如果您想等待进程完成,您可以在该线程句柄上WaitForSingleEvent(),当线程终止时该句柄会发出信号。完成后不要忘记CloseHandle()这些句柄。

【讨论】:

好的,谢谢。再问一个问题,你知道如何防止执行 CreateProcess() 函数后进度条停止吗?它锁定了我的进程(这是我想要的,因为我想在它终止后删除已执行的 EXE)。 查看编辑。在这个网站上表达感谢的一种常见方式是对答案投赞成票,甚至可能接受它。

以上是关于在 SFX 存档提取时显示进度条的主要内容,如果未能解决你的问题,请参考以下文章

C# 绑定Datagridview时显示进度条

Android:如何在将数据加载到 WebView 时显示进度条?

如何在加载时显示进度条,使用ajax

MATLAB:保存文件时显示进度条?

如何在python中将文件保存到excel时显示进度条?

C++ - 使用 std::async 时显示进度条