Inno setup 如何从PrepareToInstall事件函数设置StatusMsg
我的应用程序需要安装.NET Framework,因此我在PrepareToIntall事件函数中运行.NET安装。在安装运行时,我想显示一些关于向导的简单消息 我找到了,但是那里的解决方案对我不起作用 我试过了Inno setup 如何从PrepareToInstall事件函数设置StatusMsg,inno-setup,Inno Setup,我的应用程序需要安装.NET Framework,因此我在PrepareToIntall事件函数中运行.NET安装。在安装运行时,我想显示一些关于向导的简单消息 我找到了,但是那里的解决方案对我不起作用 我试过了 WizardForm.StatusLabel.Caption := CustomMessage('InstallingDotNetMsg'); 而且 WizardForm.PreparingLabel.Caption := CustomMessage('InstallingDotNe
WizardForm.StatusLabel.Caption := CustomMessage('InstallingDotNetMsg');
而且
WizardForm.PreparingLabel.Caption := CustomMessage('InstallingDotNetMsg');
编辑
我必须在preparetoall功能中执行此操作,因为当.net安装失败时,我需要停止安装
现在的代码如下所示:
function PrepareToInstall(var NeedsRestart: Boolean): String;
var
isDotNetInstalled : Boolean;
errorCode : Integer;
errorDesc : String;
begin
isDotNetInstalled := IsDotNetIntalledCheck();
if not isDotNetInstalled then
begin
//WizardForm.PreparingLabel.Caption := CustomMessage('InstallingDotNetMsg');
WizardForm.StatusLabel.Caption := CustomMessage('InstallingDotNetMsg');
ExtractTemporaryFile('dotNetFx40_Full_x86_x64.exe');
if not ShellExec('',ExpandConstant('{tmp}\dotNetFx40_Full_x86_x64.exe'),'/passive /norestart', '', SW_HIDE, ewWaitUntilTerminated, errorCode) then
begin
errorDesc := SysErrorMessage(errorCode);
MsgBox(errorDesc, mbError, MB_OK);
end;
isDotNetInstalled := WasDotNetInstallationSuccessful();
if not isDotNetInstalled then
begin
Result := CustomMessage('FailedToInstalldotNetMsg');
end;
end;
end;
您知道如何实现这一点吗?当您在
preparetoall
事件方法的preparetoall
页面上时,StatusLabel
由InstallingPage
向导页面托管。所以这是一个错误的标签。尝试将文本设置为PreparingLabel
是正确的,但失败,因为默认情况下该标签是隐藏的(当您将非空字符串作为结果返回给事件方法时会显示该标签)
但是您可以显示它一段时间(您使用的是ewwaitunterminated
标志,因此您的安装是同步的,因此不会造成任何影响):
另一种解决方案是在“准备安装”页面顶部显示进度页面。有关用法示例,请参见Inno附带的
CodeDlg.iss
示例脚本;这相当简单。:-)?特拉玛是对的。在大多数情况下,通过[运行]部分安装是最佳解决方案。只有在wp安装
过程中出于某种原因使用第三方应用时,才应在wp安装
之前安装该应用。@TLama+1在您的解决方案上。不幸的是,我认为我无法使用此解决方案,因为我想在.Net framework安装失败时中止安装。这就是我使用PrepareToInstall函数的原因。我将更新我的问题以向你们展示我的代码。我只是制作了一个简单的脚本,在那个里我测试了各种方法,因为你们建议了刷新过程。我找到了展示程序,它很有效。。。当您执行向导form.PreparingLabel.Show()
时,就是这样。如果执行WizardForm.StatusLabel.Show(),效果会更好代码>您还可以获得该进度条。这个解决方案也很有效。所以我接受了:)顺便说一句,我也是CR的:)等等,但是你必须在下一页才能看到StatusLabel
或ProgressGauge
。当触发preparetoall
事件时,您处于PreparingPage
上。[我注意到:-)你的一些项目的艺术很好!]我不知道你的意思。我试过了,它成功了。。。在不同的页面上调用StatusLabel.Show()是否会导致任何问题?它似乎工作得很好,不应该工作。这些控件实际位于不同的页面上。你不应该在那一页。这太疯狂了:-)您使用哪个版本的Inno安装程序?它是ANSI还是Unicode?哦,我忘了这个方法(在Delphi中)确保父级是可见的,所以它把页面放在前面,并且它只在视觉上“翻转”它。好的,您应该避免这样做,即使在这种情况下您很幸运,因为例如,当需要重新启动时,安装程序会切换回准备页面
,因此它似乎会按要求运行。
[Code]
function PrepareToInstall(var NeedsRestart: Boolean): String;
var
WasVisible: Boolean;
begin
// store the original visibility state
WasVisible := WizardForm.PreparingLabel.Visible;
try
// show the PreparingLabel
WizardForm.PreparingLabel.Visible := True;
// set a label caption
WizardForm.PreparingLabel.Caption := CustomMessage('InstallingDotNetMsg');
// do your installation here
finally
// restore the original visibility state
WizardForm.PreparingLabel.Visible := WasVisible;
end;
end;