- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
长Exec
正在安装 .NET 3.5,输出脚本基于此:
http://www.blackhillsoftware.com/blog/2006/06/26/using-innosetup-with-the-dotnet-framework/
问题是它使用了 ewWaitUntilTerminated
因为我们需要捕获退出代码。由于我们正在运行它,它变得更糟了/passive /norestart
这样用户的工作就更少了(也许我们不应该?)
我能想到的最简单的选择是在安装.NET 时隐藏窗口并在完成后再次显示它,但我不知道该怎么做。
理想的解决方案是显示一个进度页面,但这似乎不太可能,因为我们需要立即返回,但在进程退出时仍会以某种方式收到通知并捕获退出代码,否则我们会只是有一个永恒的进度条。
关于如何解决这个问题的任何想法?
编辑:最小化可能会更好,但也不知道该怎么做。我们确实会显示一条消息,通知用户该过程可能需要 10-20 分钟,但问题是主设置表单完全卡住,无法移动、最小化或对其进行任何操作。也在运行/passive
在较慢的机器上,.NET 安装程序实际上在一两分钟内没有显示任何进度。
最佳答案
使 Inno Setup“看起来不卡住”的一种方法是添加一个“假”进度指示器,如选取框,以显示正在发生的事情。但这并不能解决“窗口不可拖动/移动”的问题。
所以,另一种方法是真正解冻 Inno Setup GUI,同时执行一个长时间运行的进程:
“长时间运行的进程”通过 ShellExecuteEx()
执行.
然后安装程序使用带有条件的while循环WaitForSingleObject
和一个非常小的超时
执行AppProcessMessage
.AppProcessMessage
本身就是一个辅助函数。它使用“通用”代码重新创建 Application.ProcessMessages
-ish 过程,使用 WinAPI 函数 PeekMessage()
, TranslateMessage()
和 DispatchMessage()
.
它的工作是成为 Inno Setup GUI 的消息泵。
这个技巧使窗口再次响应/可拖动,
而“长时间运行的进程”在后台处理。
这是执行循环的来源:
if ShellExecuteEx(ExecInfo) then
begin
while WaitForSingleObject(ExecInfo.hProcess, 100) = WAIT_TIMEOUT
do begin
AppProcessMessage;
WizardForm.Refresh();
end;
CloseHandle(ExecInfo.hProcess);
end;
unzip.iss
的以下 GIST包含独立的代码
Unzip Helper for executing 7zip without blocking the Inno Setup GUI ,包括使用
AppProcessMessage
的点点滴滴功能。
关于.net - 你如何让 Inno Setup 在执行长执行时看起来不卡住?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/591899/
我是一名优秀的程序员,十分优秀!