Inno setup 如何使用inno setup pascal脚本显示阻止消息框

Inno setup 如何使用inno setup pascal脚本显示阻止消息框,inno-setup,mutex,pascal,messagebox,Inno Setup,Mutex,Pascal,Messagebox,我正在使用inno setup pascal脚本为我的应用程序创建安装程序,在我的安装程序中,有一个要求,即如果用户运行安装程序两次,则必须显示一条消息,通过检查互斥锁,说明另一个实例已在运行,我已经实现,现在的问题是它显示的消息框,但如果用户仍然尝试运行安装一次又一次以上的消息将显示多次,这是我不想看到的。因此,我的消息框应该阻止他在他的机器上做任何事,直到消息框关闭 编辑:我想阻止用户运行安装程序的当前窗口,以防止用户再次从同一位置运行安装程序 我的示例代码: [Setup] AppName

我正在使用inno setup pascal脚本为我的应用程序创建安装程序,在我的安装程序中,有一个要求,即如果用户运行安装程序两次,则必须显示一条消息,通过检查互斥锁,说明另一个实例已在运行,我已经实现,现在的问题是它显示的消息框,但如果用户仍然尝试运行安装一次又一次以上的消息将显示多次,这是我不想看到的。因此,我的消息框应该阻止他在他的机器上做任何事,直到消息框关闭

编辑:我想阻止用户运行安装程序的当前窗口,以防止用户再次从同一位置运行安装程序

我的示例代码:

[Setup]
AppName=My Program
AppVersion=1.5
DefaultDirName={pf}\My Program

[Code]
const
  MB_APPLMODAL =   $00002000;
  MB_SYSTEMMODAL = $00001000;
  MB_ICONHAND = $00000010;
  MB_ICONQUESTION = $00000020;
  MB_ICONEXCLAMATION = $00000030;
  MB_ICONASTERISK = $00000040;
  MB_ICONSTOP = MB_ICONHAND;
  MB_ICONINFORMATION = MB_ICONASTERISK;

#ifdef UNICODE
  #define AW "W"
#else
  #define AW "A"
#endif

function MessageBox(hWnd: HWND; lpText, lpCaption: string;
  uType: UINT): Integer; external 'MessageBox{#AW}@user32.dll stdcall';

function SysModalMsgBox(Owner: HWND; const Text: string; MsgType: TMsgBoxType;
  Buttons: Integer): Integer;
var
  Flags: UINT;
  Caption: string;
begin
  Flags := Buttons;

  case MsgType of
    mbInformation: Flags := Flags or MB_ICONINFORMATION;
    mbConfirmation: Flags := Flags or MB_ICONQUESTION;
    mbError: Flags := Flags or MB_ICONEXCLAMATION;
    mbCriticalError: Flags := Flags or MB_ICONSTOP;
  end;

  if not IsUninstaller then
    Caption := SetupMessage(msgSetupAppTitle)
  else
    Caption := SetupMessage(msgUninstallAppTitle);  

  Result := MessageBox(Owner, Text, Caption, MB_SYSTEMMODAL);
end;

procedure InitializeWizard;
begin
  Sleep(5000);
  SysModalMsgBox(WizardForm.Handle, 'Another instance is runinng please try again!',mbInformation , MB_OK);

end;

我会立即删除这样的安装程序。任何应用程序都不应该试图阻止整个系统,不管它是安装程序。仅供参考,Martijn添加了一个指令,允许一次只运行一个安装程序。阻止系统意味着不允许用户再次运行安装程序。您必须阻止用户运行安装程序二进制文件,这是一个系统块。您可以进行某种实例计数,当达到2时,只会退出设置而不显示该消息框。但我不明白你为什么关心这个。你是否期望你的用户完全是白痴?如果是这样,最好不要让他们安装你的应用程序以外的任何东西,因为我怀疑是否有人处理过此类问题。@TLama:请检查我的编辑……现在我正在尝试使用其标题获取messagebox句柄,如果找到了,我将退出安装程序,这是一种好的做法吗?因为每次点击都会启动exe并退出。