Inno Setup检测软件依赖环境是否安装

从 visual studio .net 到 visual studio 2013,每个主版c++++ 编译器和工具都包含一个新的独立版本的 microsoft c 运行时 (crt) 库。这些独立的 crt 版本在不同程度上彼此不兼容。例如,visual studio 2012 使用的 crt 库是第 11 版,名为 msvcr110.dll,而 visual studio 2013 使用的 crt 库是第 12 版,名为 msvcr120.dll。然而,从 visual studio 2015 开始,情况发生了变化。visual studio 2015 及其后续版本都采用了一个通用的 crt。

通用 CRT (UCRT) 是 Microsoft Windows 操作系统的一部分。它包含在 Windows 10 和 Windows Server 2016 或更高版本中。对于仍在扩展支持中的早期操作系统版本,可以通过 Windows 更新获取 UCRT。尽管支持通用 CRT 的本地部署,但存在一些限制。

最新支持的 Visual C++ 下载地址如下:

32位下载地址:https://www.php.cn/link/800f569916f0f5c1e487a9b5e976bdc4

.NET Framework 下载地址如下:

https://www.php.cn/link/e92ae67e4af9da61bbb3690018fa4f1e

.NET Framework 4.5.2 离线安装包下载地址:https://www.php.cn/link/8d4af5c8b9b40206046d4f2c889eceed

将本地安装下载文件放置在打包的代码同级的

runtime

目录下。

加载文件的代码如下:

[Files]Source: ".runtimeVC_redist.x86.exe"; DestDir: "{tmp}"; Check: NeedInstallVC

运行时安装的代码如下:

[Run]Filename: "{tmp}VC_redist.x86.exe"; Parameters: /q; WorkingDir: {tmp}; Flags: skipifdoesntexist; StatusMsg: "Install Microsoft Visual C++ Runtime ..."; Check: NeedInstallVC

检测是否需要安装的代码如下:

[Code]var vcRuntimeMissing: Boolean;function NeedInstallVC(): Boolean;begin  Result := vcRuntimeMissing;end;function InitializeSetup(): Boolean;begin  if RegValueExists(HKLM, 'SOFTWAREMicrosoftWindowsCurrentVersionUninstall{7D75664A-6C04-424C-82A1-EE88913E5F16}', 'Version')  or RegValueExists(HKLM, 'SOFTWAREMicrosoftWindowsCurrentVersionUninstall{01FAEC41-B3BC-44F4-B185-5E8475AEB855}', 'Version')    then      begin        vcRuntimeMissing := false;      end    else      begin        vcRuntimeMissing := true;      end;  result := true;end;

检测运行库是否已安装是通过注册表进行的。每个版本的运行库都有唯一的产品ID。解压

VC_redist.x86.exe

后,找到名为

0

的文件并用文本文档打开,搜索

ProductCode

可以找到两个代码,一个是 Minimum Runtime,另一个是 Additional Runtime,如下所示:

RollbackLogPathVariable="WixBundleRollbackLog_vcRuntimeMinimum_x86" ProductCode="{7D75664A-6C04-424C-82A1-EE88913E5F16}"

RollbackLogPathVariable="WixBundleRollbackLog_vcRuntimeAdditional_x86" ProductCode="{01FAEC41-B3BC-44F4-B185-5E8475AEB855}"

我们使用的是

WixBundleRollbackLog_vcRuntimeAdditional_x86

,在注册表中搜索对应的产品ID即可。

在线下载并检测 C++ 安装环境的代码如下:

[Code]function InitializeSetup: Boolean;var Path:string;    ResultCode: Integer;begin  if RegValueExists(HKLM, 'SOFTWAREMicrosoftWindowsCurrentVersionUninstall{01FAEC41-B3BC-44F4-B185-5E8475AEB855}', 'Version') then    begin      Result := true;    end  else    begin      if MsgBox('系统检测到您没有安装VC++环境,是否立刻下载并安装?', mbConfirmation, MB_YESNO) = idYes then        begin          Path := ExpandConstant('{pf}/Internet Explorer/iexplore.exe');          Exec(Path, 'https://www.php.cn/link/daaf13a1565b64dc3779f551de67b95e', '', SW_SHOWNORMAL, ewWaitUntilTerminated, ResultCode);          MsgBox('请安装好VC++环境后,再运行本安装包程序!',mbInformation,MB_OK);          Result := false;        end      else        begin          MsgBox('没有安装VC++环境,无法运行程序,本安装程序即将退出!',mbInformation,MB_OK);          Result := false;        end;    end;end;

要检测 .NET 环境,可以查看各版本和系统的关系,参考以下链接:

https://www.php.cn/link/b09d978ea462060c446ed6833f58735c

查看本机的 .NET 版本,可以输入

regedit.exe

,然后导航到以下注册表路径:

HKEY_LOCAL_MACHINESOFTWAREMicrosoftNET Framework SetupNDPHKEY_LOCAL_MACHINESOFTWAREMicrosoft.NETFrameworkpolicy

检测 .NET 环境的脚本如下:

[Code]// Indicates whether the specified version and service pack of the .NET Framework is installed.

// version -- Specify one of these strings for the required .NET Framework version:// 'v1.1' .NET Framework 1.1// 'v2.0' .NET Framework 2.0// 'v3.0' .NET Framework 3.0// 'v3.5' .NET Framework 3.5// 'v4Client' .NET Framework 4.0 Client Profile// 'v4Full' .NET Framework 4.0 Full Installation// 'v4.5' .NET Framework 4.5// 'v4.5.1' .NET Framework 4.5.1// 'v4.5.2' .NET Framework 4.5.2// 'v4.6' .NET Framework 4.6// 'v4.6.1' .NET Framework 4.6.1// 'v4.6.2' .NET Framework 4.6.2// 'v4.7' .NET Framework 4.7// 'v4.7.1' .NET Framework 4.7.1// 'v4.7.2' .NET Framework 4.7.2// 'v4.8' .NET Framework 4.8

// service -- Specify any non-negative integer for the required service pack level:// 0 No service packs required// 1, 2, etc. Service pack 1, 2, etc. requiredfunction IsDotNetDetected(version: string; service: cardinal): boolean;varkey, versionKey: string;install, release, serviceCount, versionRelease: cardinal;success: boolean;beginversionKey := version;versionRelease := 0;

// .NET 1.1 and 2.0 embed release number in version keyif version = 'v1.1' then begin    versionKey := 'v1.1.4322';endelse if version = 'v2.0' then begin    versionKey := 'v2.0.50727';end// .NET 4.5 and newer install as update to .NET 4.0 Fullelse if Pos('v4.', version) = 1 then begin    versionKey := 'v4Full';    case version of      'v4.5':   versionRelease := 378389;      'v4.5.1': versionRelease := 378675; // 378758 on Windows 8 and older      'v4.5.2': versionRelease := 379893;      'v4.6':   versionRelease := 393295; // 393297 on Windows 8.1 and older      'v4.6.1': versionRelease := 394254; // 394271 on Windows 8.1 and older      'v4.6.2': versionRelease := 394802; // 394806 on Windows 8.1 and older      'v4.7':   versionRelease := 460798; // Windows 10      'v4.7.1': versionRelease := 461308; // Windows 10      'v4.7.2': versionRelease := 461808; // Windows 10      'v4.8'  : versionRelease := 528040; // Windows 10    end;end;// installation key group for all .NET versionskey := 'SOFTWAREMicrosoftNET Framework SetupNDP' + versionKey;// .NET 3.0 uses value InstallSuccess in subkey Setupif Pos('v3.0', version) = 1 then begin    success := RegQueryDWordValue(HKLM, key + 'Setup', 'InstallSuccess', install);end else begin    success := RegQueryDWordValue(HKLM, key, 'Install', install);end;// .NET 4.0 and newer use value Servicing instead of SPif Pos('v4', version) = 1 then begin    success := success and RegQueryDWordValue(HKLM, key, 'Servicing', serviceCount);end else begin    success := success and RegQueryDWordValue(HKLM, key, 'SP', serviceCount);end;// .NET 4.5 and newer use additional value Releaseif versionRelease > 0 then begin    success := success and RegQueryDWordValue(HKLM, key, 'Release', release);    success := success and (release >= versionRelease);end;result := success and (install = 1) and (serviceCount >= service);

end;

function InitializeSetup: Boolean;var Path:string;ResultCode: Integer;beginif IsDotNetDetected('v4.5.2', 0) thenbeginResult := true;endelsebeginif MsgBox('系统检测到您没有安装.Net Framework4.5.2,是否立刻下载并安装?', mbConfirmation, MB_YESNO) = idYes thenbeginPath := ExpandConstant('{pf}/Internet Explorer/iexplore.exe');Exec(Path, 'https://www.php.cn/link/493c4b304be1e32548b7ad5d5c22ef6b', '', SW_SHOWNORMAL, ewWaitUntilTerminated, ResultCode);MsgBox('请安装好.Net Framework环境后,再运行本安装包程序!',mbInformation,MB_OK);Result := false;endelsebeginMsgBox('没有安装.Net Framework环境,无法运行程序,本安装程序即将退出!',mbInformation,MB_OK);Result := false;end;end;end;

注意,许多文章中提到的注册表地址

RegKeyExists(HKLM, 'SOFTWARE/Microsoft/.NETFramework/policy/v2.0')

只能获取到较为粗略的版本信息(如 v2.0/v4.0),不建议使用。更详细的版本信息应从

HKEY_LOCAL_MACHINESOFTWAREMicrosoftNET Framework SetupNDP

路径获取。

Inno Setup检测软件依赖环境是否安装

Inno Setup检测软件依赖环境是否安装

检测 C++ 和 .NET 环境的完整代码如下:

[Code]// Indicates whether the specified version and service pack of the .NET Framework is installed.

// version -- Specify one of these strings for the required .NET Framework version:// 'v1.1' .NET Framework 1.1// 'v2.0' .NET Framework 2.0// 'v3.0' .NET Framework 3.0// 'v3.5' .NET Framework 3.5// 'v4Client' .NET Framework 4.0 Client Profile// 'v4Full' .NET Framework 4.0 Full Installation// 'v4.5' .NET Framework 4.5// 'v4.5.1' .NET Framework 4.5.1// 'v4.5.2' .NET Framework 4.5.2// 'v4.6' .NET Framework 4.6// 'v4.6.1' .NET Framework 4.6.1// 'v4.6.2' .NET Framework 4.6.2// 'v4.7' .NET Framework 4.7// 'v4.7.1' .NET Framework 4.7.1// 'v4.7.2' .NET Framework 4.7.2// 'v4.8' .NET Framework 4.8

// service -- Specify any non-negative integer for the required service pack level:// 0 No service packs required// 1, 2, etc. Service pack 1, 2, etc. requiredfunction IsDotNetDetected(version: string; service: cardinal): boolean;varkey, versionKey: string;install, release, serviceCount, versionRelease: cardinal;success: boolean;beginversionKey := version;versionRelease := 0;

// .NET 1.1 and 2.0 embed release number in version keyif version = 'v1.1' then begin    versionKey := 'v1.1.4322';endelse if version = 'v2.0' then begin    versionKey := 'v2.0.50727';end// .NET 4.5 and newer install as update to .NET 4.0 Fullelse if Pos('v4.', version) = 1 then begin    versionKey := 'v4Full';    case version of      'v4.5':   versionRelease := 378389;      'v4.5.1': versionRelease := 378675; // 378758 on Windows 8 and older      'v4.5.2': versionRelease := 379893;      'v4.6':   versionRelease := 393295; // 393297 on Windows 8.1 and older      'v4.6.1': versionRelease := 394254; // 394271 on Windows 8.1 and older      'v4.6.2': versionRelease := 394802; // 394806 on Windows 8.1 and older      'v4.7':   versionRelease := 460798; // Windows 10      'v4.7.1': versionRelease := 461308; // Windows 10      'v4.7.2': versionRelease := 461808; // Windows 10      'v4.8'  : versionRelease := 528040; // Windows 10    end;end;// installation key group for all .NET versionskey := 'SOFTWAREMicrosoftNET Framework SetupNDP' + versionKey;// .NET 3.0 uses value InstallSuccess in subkey Setupif Pos('v3.0', version) = 1 then begin    success := RegQueryDWordValue(HKLM, key + 'Setup', 'InstallSuccess', install);end else begin    success := RegQueryDWordValue(HKLM, key, 'Install', install);end;// .NET 4.0 and newer use value Servicing instead of SPif Pos('v4', version) = 1 then begin    success := success and RegQueryDWordValue(HKLM, key, 'Servicing', serviceCount);end else begin    success := success and RegQueryDWordValue(HKLM, key, 'SP', serviceCount);end;// .NET 4.5 and newer use additional value Releaseif versionRelease > 0 then begin    success := success and RegQueryDWordValue(HKLM, key, 'Release', release);    success := success and (release >= versionRelease);end;result := success and (install = 1) and (serviceCount >= service);

end;

function InitializeSetup: Boolean;var Path:string;ResultCode: Integer;beginif IsDotNetDetected('v4.5.2', 0) thenbeginif RegValueExists(HKLM, 'SOFTWAREMicrosoftWindowsCurrentVersionUninstall{01FAEC41-B3BC-44F4-B185-5E8475AEB855}', 'Version') thenbeginResult := true;endelsebeginif MsgBox('系统检测到您没有安装VC++环境,是否立刻下载并安装?', mbConfirmation, MB_YESNO) = idYes thenbeginPath := ExpandConstant('{pf}/Internet Explorer/iexplore.exe');Exec(Path, 'https://www.php.cn/link/daaf13a1565b64dc3779f551de67b95e', '', SW_SHOWNORMAL, ewWaitUntilTerminated, ResultCode);MsgBox('请安装好VC++环境后,再运行本安装包程序!',mbInformation,MB_OK);Result := false;endelsebeginMsgBox('没有安装VC++环境,无法运行程序,本安装程序即将退出!',mbInformation,MB_OK);Result := false;end;end;endelsebeginif MsgBox('系统检测到您没有安装.Net Framework4.5.2,是否立刻下载并安装?', mbConfirmation, MB_YESNO) = idYes thenbeginPath := ExpandConstant('{pf}/Internet Explorer/iexplore.exe');Exec(Path, 'https://www.php.cn/link/493c4b304be1e32548b7ad5d5c22ef6b', '', SW_SHOWNORMAL, ewWaitUntilTerminated, ResultCode);MsgBox('请安装好.Net Framework环境后,再运行本安装包程序!',mbInformation,MB_OK);Result := false;endelsebeginMsgBox('没有安装.Net Framework环境,无法运行程序,本安装程序即将退出!',mbInformation,MB_OK);Result := false;end;end;end;

以上就是Inno Setup检测软件依赖环境是否安装的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/157526.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
Seed-Thinking-v1.5— 字节跳动推出的最新思考模型
上一篇 2025年12月4日 23:57:56
docker怎么搭建nacos+nginx+mysql+redis+springboot项目
下一篇 2025年12月4日 23:59:58

相关推荐

  • windows10如何查看S.M.A.R.T.硬盘状态_windows10硬盘S.M.A.R.T.状态查看方法

    电脑运行慢、蓝屏或文件损坏可能是硬盘故障前兆,可通过S.M.A.R.T.技术检测健康状况。1、使用WMIC命令行工具输入“wmic diskdrive get model,status”查看状态,显示Pred Fail需立即备份数据;2、CrystalDiskInfo可深度分析S.M.A.R.T.参…

    2026年9月21日
    100
  • Photopea的AI功能怎么裁剪图片?快速实现高效图片裁剪技巧

    Photopea的AI功能怎么裁剪图片?快速实现高效图片裁剪技巧Photopea的AI功能怎么裁剪图片?快速实现高效图片裁剪技巧Photopea的AI功能怎么裁剪图片?快速实现高效图片裁剪技巧Photopea的AI功能怎么裁剪图片?快速实现高效图片裁剪技巧

    Photopea的AI功能通过智能选择工具与内容感知技术结合,实现高效图片裁剪。首先使用对象选择、快速选择或魔棒工具智能识别主体或背景,再通过“选择并遮住”精细调整边缘,尤其适用于复杂轮廓如发丝。随后可应用图层蒙版透明化背景,并用裁剪工具调整画布范围。结合内容感知填充可移除干扰元素并自动补全画面,内…

    2026年9月21日 用户投稿
    300
  • Sublime开发MySQL存储过程教程实战_封装重复逻辑减少前端负担

    Sublime开发MySQL存储过程教程实战_封装重复逻辑减少前端负担Sublime开发MySQL存储过程教程实战_封装重复逻辑减少前端负担Sublime开发MySQL存储过程教程实战_封装重复逻辑减少前端负担Sublime开发MySQL存储过程教程实战_封装重复逻辑减少前端负担

    在web开发中使用mysql存储过程能有效封装逻辑并减少前端负担,本文介绍了其优势、环境配置及实战技巧。一、存储过程的优势包括减少网络传输、提高性能、统一业务逻辑;二、sublime text配置步骤为安装package control、sublimerepl插件、sql语法高亮插件,并建议新建.s…

    2026年9月21日 用户投稿
    800
  • Linux中如何安装Redis_Linux安装Redis服务的完整教程

    安装编译环境和依赖:Ubuntu/Debian用apt安装build-essential tcl wget,CentOS/RHEL用yum安装Development Tools和tcl wget。2. 下载Redis 7.2.4源码包并%ignore_a_1%,进入目录后执行make编译,可选mak…

    2026年9月21日
    000
  • 编译CEGUI「建议收藏」

    大家好,很高兴再次与你们见面,我是你们的老朋友全栈君。 平台: Windows 7 / 64位 / VS2005 CEGUI下载 地址:https://www.php.cn/link/9a2327a2fcc570914ce9c9e61581cbf8 源码选择: CEGUI 0.7.9 库源码下载 这…

    2026年9月21日
    000
  • VSCode代码空格怎么解决_VSCode缩进与格式处理教程

    解决VSCode代码空格和缩进问题,需配置settings.json中的缩进规则并引入外部格式化工具。首先设置”editor.tabSize”、”editor.insertSpaces”和”editor.detectIndentation&…

    2026年9月21日
    100
  • PHP框架中间件有什么用处_PHP框架中间件设计与实现

    PHP框架中间件是处理请求和响应的过滤器,用于实现身份验证、日志记录、CORS等通用逻辑,核心价值在于解耦和提升可维护性。通过定义中间件接口、具体中间件类及管道调度器可实现自定义中间件,如身份验证或CORS处理。在Laravel中可通过Kernel.php配置全局、分组或路由级中间件,执行顺序按注册…

    2026年9月21日
    000
  • 苹果手机4800万像素功能如何开启

    苹果手机4800万像素模式开启方法 若想使用苹果手机的4800万像素拍摄功能,首先需确认您的设备型号及系统版本是否支持该功能。进入手机“相机”应用后,前往系统设置中的“相机”选项,查找“分辨率”或“格式”相关设置。部分机型在此处会提供“HEIF高效率”或“ProRAW”选项,启用后可激活4800万像…

    2026年9月21日
    200
  • Java中字符到数字转换:解决for循环提前返回的常见陷阱

    本文探讨java中`for`循环在字符到数字转换时,因`return`语句放置不当导致程序提前终止、无法完整处理字符串的问题。我们将分析这种常见陷阱,并提供修正方案,演示如何正确利用循环填充数组,并在循环结束后统一返回最终结果,确保每个字符都能被准确映射和组合。 引言:字符到数字的映射需求 在编程实…

    2026年9月21日
    000
  • Linux如何查看网络带宽使用情况

    使用iftop实时查看网络连接带宽,nethogs按进程监控流量,sar查看历史网络统计,vnstat记录长期流量,四者分别适用于实时监控、进程定位、短期统计和长期分析。 在Linux系统中,查看网络带宽使用情况有多种方法,可以通过命令行工具实时监控网络流量和带宽占用。以下是几种常用且实用的方式。 …

    2026年9月21日
    100
  • 系统界面美化的10个方法

    采用一致色彩方案,使用协调主色调并保持元素颜色统一;2. 选用清晰字体如思源黑体,规范字号层级;3. 增加留白提升视觉舒适度;4. 统一图标风格并使用SVG格式;5. 添加微动效增强交互引导;6. 采用卡片式布局与栅格系统;7. 支持深浅色模式切换并优化对比度;8. 精简装饰元素突出核心功能;9. …

    2026年9月21日
    200
  • win10登录界面不显示用户头像或名称怎么办_恢复登录界面完整显示的操作方法

    登录界面缺少头像或账户名时,先检查账户名一致性,修复头像缓存,重设头像,扫描系统文件,必要时创建新管理员账户验证问题。 如果您在启动Windows 10后,登录界面仅显示密码输入框而缺少用户头像或账户名称,则可能是由于系统设置、缓存异常或账户配置问题导致。以下是恢复登录界面完整显示的详细操作方法。 …

    2026年9月21日
    100
  • word怎么设置页边距_word文档页边距设置步骤

    首先打开Word文档,点击“布局”选项卡中的“页边距”按钮,可选择预设值或点击“自定义页边距”进行详细设置,输入上下左右边距及装订线数值,再通过“应用于”选择范围,最后点击“确定”完成设置。 在使用Word编辑文档时,设置合适的页边距能让内容排版更美观,也符合打印或提交要求。下面介绍如何在Word中…

    2026年9月21日
    000
  • 小红书合规引流全套方案2025:6招实现私域用户300%增长的实用技巧

    内容为王,精准定位:围绕目标用户画像创作高质量、垂直领域的原创内容,如教程攻略、真实好物推荐、生活分享与避坑指南,形式涵盖图文、短视频与直播,以解决用户实际问题为核心;2. 巧妙互动,建立连接:积极回复评论与私信,发起话题活动与抽奖提升参与感,并通过创建社群增强用户粘性,始终以真诚态度提供价值;3.…

    2026年9月21日
    000
  • 梦幻号虚拟主播电商运营宝典(附新手教程+配套工具清单)

    虚拟主播电商的核心在于“内容驱动销售,人设凝聚用户”,要让“梦幻号”真正动起来并实现带货,必须先赋予其鲜明的人设,包括清晰的定位标签(如美食家、科技宅)、独特的人格魅力(性格、口头禅、小缺点)和与产品的强关联性,使其具备辨识度和故事感,从而建立用户信任;接着通过obs studio、vtube st…

    2026年9月21日
    000
  • win10平板模式下屏幕键盘不自动弹出怎么办_恢复屏幕键盘自动弹出的技巧

    1、检查平板电脑模式设置,确保登录和使用时均启用平板模式并重启;2、在设备→输入中开启“不处于平板模式且未连接键盘时显示触摸键盘”;3、通过注册表编辑器创建InitialKeyboardIndicators值为2(十六进制)以强制启用键盘指示器;4、手动显示触摸键盘按钮并测试各应用兼容性,排查特定软…

    2026年9月21日
    000
  • deepseek下载速度优化_从deepseek下载速度优化官网获取

    deepseek下载速度优化入口在官网https://www.deepseek.com,进入后可通过设置调整响应模式、使用智能路由和数据压缩技术提升速度。 ☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 免费无限量使用 DeepSeek R1 模型☜☜☜ deepseek下载速度优化入口地址在…

    2026年9月21日
    000
  • Linux如何设置目录的执行权限

    目录的执行权限是访问其内容的“钥匙”,使用chmod命令可通过符号或八进制模式设置,常见权限为755(所有者rwx,组和其他用户rx),递归设置时推荐结合find命令分别处理文件和目录,避免误加执行权限。 在Linux中,设置目录的执行权限( x )并非意味着你可以“运行”这个目录,而是赋予了你进入…

    2026年9月21日
    000
  • 纯白颜值、双模切换:“纯白小金刚”技嘉M27UP ICE显示器登场

    纯白颜值、双模切换:“纯白小金刚”技嘉M27UP ICE显示器登场纯白颜值、双模切换:“纯白小金刚”技嘉M27UP ICE显示器登场纯白颜值、双模切换:“纯白小金刚”技嘉M27UP ICE显示器登场纯白颜值、双模切换:“纯白小金刚”技嘉M27UP ICE显示器登场

    在电竞DIY领域深耕多年的技嘉,始终致力于满足玩家对高颜值与个性化外设的追求。为助力用户打造一体化的纯白主题电竞空间,品牌全新推出了专为此场景设计的M27UP ICE显示器。这款产品定位于两千元左右价位,凭借出众的纯白外观、卓越性能与超高性价比,被玩家们亲切称为“纯白小金刚”。如果你正想入手一台兼具…

    2026年9月21日 用户投稿
    000
  • Java多线程API调用中Future.get()返回null的解决方案

    本文旨在解决%ignore_a_1%api调用中`future.get()`方法返回`null`的常见问题。当使用`callable`和`executorservice`并发执行api请求并尝试获取结果时,如果流读取逻辑不当,可能导致获取到的数据为空。文章将详细解释问题根源,并提供使用`string…

    2026年9月21日
    000

发表回复

登录后才能评论
关注微信