我的应用程序需要安装.NET Framework,因此我在 PrepareToIntall 事件函数中运行.NET安装。在安装运行时,我想在Wizard上显示一些简单的消息。
我找到How to set the status message in [Code] Section of Inno install script?,但那里的解决方案并不适合我。
我试过
WizardForm.StatusLabel.Caption := CustomMessage('InstallingDotNetMsg');
以及
WizardForm.PreparingLabel.Caption := CustomMessage('InstallingDotNetMsg');
修改
我必须在 PrepareToInstall 功能中执行此操作,因为我需要在.net安装失败时停止设置。
Code现在看起来像这样:
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;
任何想法如何实现这一目标?
答案 0 :(得分:9)
当您在StatusLabel
事件方法的InstallingPage
页面上时,PreparingPage
由PrepareToInstall
向导页面托管。所以这是一个错误的标签。您将文本设置为PreparingLabel
的尝试是正确的,但是失败了,因为默认情况下该标签是隐藏的(当您将非空字符串作为结果返回到事件方法时显示)。
但你可以显示它一段时间(你使用ewWaitUntilTerminated
标志,所以你的安装是同步的,因此它不会伤害任何东西):
[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;
答案 1 :(得分:0)
另一种解决方案是使用CreateOutputProgressPage
在“准备安装”页面的顶部显示进度页面。有关用法的示例,请参阅Inno附带的CodeDlg.iss
示例脚本;它相当简单。