You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Inno Setup Pascal脚本检查系统是否安装Docker

需求说明

需要验证用户Windows系统是否已安装Docker:

  • 若已安装,继续安装流程
  • 若未安装,显示错误提示并终止安装
    此前采用检查注册表的方式不准确,要求改为通过执行docker命令并验证输出来实现。

原注册表检查代码

function GetHKLM: Integer;
begin
  if IsWin64 then
    Result := HKLM64
  else
    Result := HKLM32;
end;

function GetHKU: Integer;
begin
  if IsWin64 then
    Result := HKCU64
  else
    Result := HKCU32;
end;

function InitializeSetup: Boolean;
begin
  // Opening the setup installer initially
  Result := True;
  //if the docker is present in the machine registry return True else checking user registry
  if not RegKeyExists(GetHKLM, 'SOFTWARE\Docker Inc.') then
  begin
    if not RegKeyExists(GetHKU, 'Software\Docker Inc.') then
    begin   
      // return False to prevent installation to continue 
      Result := False;
      // Display that you need to install docker.
      SuppressibleMsgBox('<Docker not found!>', mbCriticalError, MB_OK, IDOK);
    end;
  end;
end;

尝试的示例代码(待修正)

function checkdocker() :Boolean;
var
  dockerfound: string;
begin
  Result :=    
    ShellExecute(application.handle, 'docker', nil, nil, SW_MAXIMIZE)
end;

function InitializeSetup: Boolean;
begin
  Result := True;
  if not checkdocker then;
    SuppressibleMsgBox('<Docker not found!>', mbCriticalError, MB_OK, IDOK);
  else
    #continue
end;

正确实现代码

function CheckDockerInstalled: Boolean;
var
  ExitCode: Integer;
begin
  // 执行docker --version命令,隐藏窗口并等待执行完成
  Result := Exec('docker.exe', '--version', '', SW_HIDE, ewWaitUntilTerminated, ExitCode);
  
  // 命令可执行且退出码为0,说明Docker已安装并在PATH中
  Result := Result and (ExitCode = 0);
end;

function InitializeSetup: Boolean;
begin
  Result := True;
  
  if not CheckDockerInstalled then
  begin
    Result := False;
    SuppressibleMsgBox('未找到Docker!请先安装Docker后再继续。', mbCriticalError, MB_OK, IDOK);
  end;
end;

实现说明

  • 用Exec替代ShellExecute:Exec可以捕获命令的退出码,适合判断命令是否执行成功,而ShellExecute无法直接获取执行结果
  • 选择docker --version:这是轻量级检查,不会启动Docker守护进程,仅验证docker.exe是否存在且可用
  • 返回Result := False会直接终止安装流程,符合需求逻辑

内容的提问来源于stack exchange,提问作者Positive MA

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 07:00:58