[Run] Filename: "{app}\MyApp.exe"; Flags: postinstall nowait
我希望我的应用程序开始时不显示复选框(这将禁止用户这样做).
有人可以告诉我怎么样吗?
谢谢.
解决方法
1.向导完成后如何手动运行应用程序?
我个人更喜欢这种方式,因为它比添加一个复选框并稍后隐藏它更直接.您将删除当前的[Run]部分条目,并在其CurPageID参数等于wpFinished时从NextButtonClick
事件方法调用以下函数之一,这表示Finish按钮单击:
> Exec
– 使用与Setup / Uninstall相同的凭据执行指定的可执行文件或批处理文件.
> ExecAsOriginalUser
– 使用最初启动安装程序的用户的(通常是非提升的)凭据执行指定的可执行文件或批处理文件
> ShellExec
– 使用与Setup / Uninstall相同的凭据打开指定文件或执行Verb指定的其他操作.
> ShellExecAsOriginalUser
– 使用最初启动安装程序的用户的(通常是非提升的)凭据,打开指定的文件或执行Verb指定的其他操作.
因为您尚未使用runascurrentuser
或shellexec
标志,所以安装程序内部调用类似于此的函数:
function NextButtonClick(CurPageID: Integer): Boolean; var ResultCode: Integer; begin Result := True; if CurPageID = wpFinished then ExecAsOriginalUser(ExpandConstant('{app}\MyApp.exe'),'',SW_SHOWNORMAL,ewNoWait,ResultCode); end;
该解决方案的一个缺点是,即使设置请求重新启动,也将执行程序.为了解决缺少确定此请求的可能性,我们可以检查YesRadio是否可见(它是“是,立即重新启动计算机”单选按钮)并选中,这意味着要求用户重新启动计算机并进行确认.以下是考虑重启请求的版本:
function NextButtonClick(CurPageID: Integer): Boolean; var ResultCode: Integer; begin Result := True; // if the "Finish" button was clicked and "Yes,restart the computer now" // radio button was either not visible or not selected that time,then... if (CurPageID = wpFinished) and ((not WizardForm.YesRadio.Visible) or (not WizardForm.YesRadio.Checked)) then ExecAsOriginalUser(ExpandConstant('{app}\MyApp.exe'),ResultCode); end;
2.如何在最后一页上禁用安装后复选框?
另一个选项是禁用复选框.用户将看到应用程序将被执行,但无法对其执行任何操作(当然,除了从任务管理器中删除设置).这次你将保留[Run]部分条目,但是从[Code]部分修改RunList:
[Setup] AppName=My Program AppVersion=1.5 DefaultDirName=My Program [Files] Source: "MyApp.exe"; DestDir: "{app}" [Run] Filename: "{app}\MyApp.exe"; Flags: postinstall nowait [Code] procedure CurPageChanged(CurPageID: Integer); begin // you must do this as late as possible,because the RunList is being modified // after installation; so this will check if there's at least one item in the // RunList and then set to the first item (indexing starts at 0) Enabled state // to False if (CurPageID = wpFinished) and (WizardForm.RunList.Items.Count > 0) then WizardForm.RunList.ItemEnabled[0] := False; end;
3.如何完全隐藏RunList?
与第二个选项相反,这将按照您的要求执行.它将隐藏复选框,或者更确切地说,它将隐藏整个RunList,因此如果在[Run]部分中指定了postinstall
标志的多个条目,则不会看到它:
[Setup] AppName=My Program AppVersion=1.5 DefaultDirName=My Program [Files] Source: "MyApp.exe"; DestDir: "{app}" [Run] Filename: "{app}\MyApp.exe"; Flags: postinstall nowait [Code] procedure CurPageChanged(CurPageID: Integer); begin if CurPageID = wpFinished then WizardForm.RunList.Visible := False; end;