我有以下几行:
[Run]
Filename: "{app}\MyApp.exe"; Flags: postinstall nowait
我希望我的应用程序可以在不显示复选框的情况下开始使用(这将禁止用户这样做)。
有人可以告诉我如何吗?谢谢。
我能想到的选择很少。第一个是从[Code]
脚本的部分运行您的应用程序,第二个是禁用该[Run]
部分条目的复选框,第三个是隐藏RunList
。
我个人更喜欢这种方式,因为它比添加复选框并在以后将其隐藏更为直接。当参数等于时,您将删除当前[Run]
节条目并从NextButtonClick
事件方法中调用以下函数之一,该CurPageID
参数wpFinished
表示单击完成按钮:
Exec
-使用与安装/卸载相同的凭据执行指定的可执行文件或批处理文件。ExecAsOriginalUser
-使用最初启动安装程序的用户的(通常不提升的)凭据执行指定的可执行文件或批处理文件ShellExec
-使用与安装/卸载相同的凭据打开指定的文件或执行Verb指定的其他操作。ShellExecAsOriginalUser
-使用最初启动安装程序的用户的(通常不提升的)凭据打开指定的文件或执行Verb指定的其他操作。因为您没有使用过runascurrentuser
norshellexec
标志,所以安装程序会在内部调用类似于以下的函数:
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'), '', '',
SW_SHOWNORMAL, ewNoWait, ResultCode);
end;
另一个选项是禁用该复选框。用户将看到该应用程序将要执行,但是将无法对其执行任何操作(当然,除了从“任务管理器”中删除安装程序之外)。这次,您将保留您的[Run]
部分条目,但从RunList
该[Code]
部分修改:
[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;
与第二种选择相反,这将满足您的要求。它将使复选框保持隐藏状态,或者更确切地说,它将隐藏整个复选框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;
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句