在 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 存档提取时显示进度条的主要内容,如果未能解决你的问题,请参考以下文章