Inno Setup - 在没有管理员权限的情况下执行安装程序时,防止安装和执行程序

时间:2017-03-30 19:54:21

标签: inno-setup

我希望我的安装程序在开始时检查管理员权限 ,如果不执行弹出表单并退出安装的程序

procedure MyAfterInstall(); 
var 
  MyProgChecked: boolean;
  ErrorCode : Integer;      
begin    
  MyProgChecked := not IsAdminLoggedOn;    
  if MyProgChecked =true then   
    ShellExec('', ExpandConstant('\users\public\EzPasteFiles\RAADMIN.EXE'), '',      
              '', SW_SHOW, ewNoWait,ErrorCode ) ; 
  ExitProcess(0);  
end;

我的问题是,在哪里放置以及如何使 RAADMIN.EXE 可用于该过程?

我尝试过没有成功

Source: "c:\Dropbox\word\EzPasteOffice64Win10\RunAsAnAdminTutorial\RAADMIN.exe"; \
  DestDir: "\users\public\EzPasteFiles"; AfterInstall: MyAfterInstall 

2 个答案:

答案 0 :(得分:2)

要检查管理员权限并有条件地中止安装,请使用InitializeSetup event function

要在安装前提取某些文件,请使用ExtractTemporaryFile support function

当然,只有你设置PrivilegesRequired=lowest,这一切才有意义。否则,您的安装程序将永远不会在没有管理员权限的情况下运行。

[Setup]
PrivilegesRequired=lowest

[Files]
Source: "C:\source\path\RAADMIN.exe"; Flags: dontcopy

[Code]

function InitializeSetup(): Boolean;
var 
  ErrorCode: Integer;
  Path: string;
begin    
  Result := True;

  if not IsAdminLoggedOn then
  begin
    Log('No admin privileges, executing RAADMIN');
    ExtractTemporaryFile('RAADMIN.exe');
    Path := ExpandConstant('{tmp}\RAADMIN.exe');
    if not Exec(Path, '', '', SW_SHOW, ewNoWait, ErrorCode) then
    begin
      MsgBox('Error executing RAADMIN', mbError, MB_OK);
    end;
    Result := False; { abort installation }
  end;
end;

虽然它只是显示一个表单,您是否考虑在Inno Setup中实现该表单?

答案 1 :(得分:1)

将代码放在函数InitializeSetup()中,当安装程序启动时,该函数首先被调用。

如果您从此功能返回 False ,安装程序将立即退出。

详细信息:https://jrsoftware.org/ishelp/topic_scriptevents.htm