news 2026/10/22 23:23:07

在 Visual Studio 2022 中构建 LGTVCompanion:vcpkg 依赖管理、Manifest 与手动安装两种方式及安装包编译指南

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
在 Visual Studio 2022 中构建 LGTVCompanion:vcpkg 依赖管理、Manifest 与手动安装两种方式及安装包编译指南
  • 桌面应用
  • CLI
  • 智能硬件

【免费下载链接】LGTVCompanion

Power On and Off WebOS LG TVs together with your PC

项目地址:https://gitcode.com/gh_mirrors/lg/LGTVCompanion
点击查看免费下载

本文基于仓库文档 Docs/Build how-to.md,讲解如何从零开始构建 LGTVCompanion(一款随 PC 开关机自动管理 LG WebOS 电视电源的应用)的 UI、Service、Daemon、Console、Updater 及 WiX 安装包:你将掌握 vcpkg 依赖的 Manifest 与手动两种安装方式、每个第三方库在代码中的实际用途,以及用 Heatwave 扩展构建 WiX 安装包所需的完整配置脉络。

构建目标:解决方案结构与编译产物

LGTVCompanion.sln 定义了 5 个配置平台组合(Debug|x64、Release|x64、Debug|arm64、Release|arm64),包含 6 个项目。对照各.vcxproj中的TargetName设置,构建完成后应得到以下产物,它们也正是安装程序打包的文件(见 LGTV Companion Setup/Product.wxs 中的File组件声明):

项目目录编译产物角色
LGTV Companion UILGTV Companion.exe配置界面
LGTV Companion ServiceLGTVsvc.exe后台 Windows 服务,核心逻辑
LGTV Companion UserLGTVdaemon.exe用户态守护进程(Daemon)
LGTV Companion ConsoleLGTVcli.exe命令行工具
LGTV Companion UpdaterLGTVupdater.exe静默更新器
LGTV Companion SetupLGTV Companion Setup <Platform>(msi)WiX 安装包

构建前提(文档 Docs/Build how-to.md 的原始要求):

  • Visual Studio 2022:所有项目的平台工具集均为v143(VS2022 对应的工具集),语言标准统一为 C++17(stdcpp17);
  • 安装vcpkg:Microsoft 的 Windows 平台 C/C++ 包管理器;
  • 若构建安装包,还需安装Heatwave for VS2022扩展(FireGiant 提供的 WiX 集成插件)。

方式一:启用 vcpkg Manifest 自动解析依赖

仓库根目录自带一份 vcpkg manifest(vcpkg.json),内容如下:

{ "$schema": "https://raw.githubusercontent.com/microsoft/vcpkg/master/scripts/vcpkg.schema.json", "name": "lgtv-companion", "version": "0", "dependencies": [ "nlohmann-json", "boost-asio", "boost-beast", "openssl", "phnt" ] }

启用 Manifest 后,构建时 vcpkg 会根据这份清单自动下载、配置并安装所需依赖,无需手工执行 install 命令。文档给出的启用步骤是:

  1. 在解决方案中打开每个项目的“属性”页面;
  2. 进入 vcpkg 相关选项区,将"Use Manifest"(使用 Manifest)设为 "Yes";
  3. 对Debug 与 Release 两种配置、x64 与 ARM64 两个平台重复以上操作。

这里有一个容易被忽略的细节:从源码看,当前仓库中各项目默认关闭了 Manifest。例如 LGTV Companion Service/LGTV Companion Service.vcxproj 中显式声明了:

<PropertyGroup Label="Vcpkg"> <VcpkgEnableManifest>false</VcpkgEnableManifest> </PropertyGroup>

UI、Console、User(Daemon)、Updater 等项目也存在同样的VcpkgEnableManifest开关或按平台配置的 triplet 属性。因此按文档手动把各项目的 "Use Manifest" 改为 Yes(或等价地修改VcpkgEnableManifest属性)后,manifest 机制才会生效;若不启用,则必须走下面的手动安装方式。

方式二:手动安装 vcpkg 依赖

不启用 Manifest 时,需要按平台手动安装全部依赖。文档给出的完整命令如下,分为 x64 与 ARM64 两组:

x64 平台(x64-windows-static):

vcpkg install nlohmann-json:x64-windows-static vcpkg install boost-asio:x64-windows-static vcpkg install boost-beast:x64-windows-static vcpkg install wintoast:x64-windows-static vcpkg install openssl:x64-windows-static vcpkg install phnt:x64-windows-static

ARM64 平台(arm64-windows-static):

vcpkg install nlohmann-json:arm64-windows-static vcpkg install boost-asio:arm64-windows-static vcpkg install boost-beast:arm64-windows-static vcpkg install wintoast:arm64-windows-static vcpkg install openssl:arm64-windows-static vcpkg install phnt:arm64-windows-static

triplet 与项目配置如何对应

这些命令里的x64-windows-static/arm64-windows-statictriplet 并非随意选取,而是与各项目工程文件中的VcpkgTriplet属性一一对应。例如 LGTV Companion UI/LGTV Companion UI.vcxproj:

<VcpkgTriplet Condition="'$(Platform)'=='x64'">x64-windows-static</VcpkgTriplet> <VcpkgTriplet Condition="'$(Platform)'=='ARM64'">arm64-windows-static</VcpkgTriplet>

即 VS 构建 x64 配置时使用x64-windows-static,构建 ARM64 配置时使用arm64-windows-static——所以手动安装时两套 triplet 必须都装齐。-static后缀意味着依赖以静态库形式链接,这与各项目工程文件中统一的静态运行时设置一致(Debug 用MultiThreadedDebug、Release 用MultiThreaded),因此构建产物不依赖 VC 运行时动态库。

各依赖在代码中的实际用途

从源码结构看,这些依赖并非摆设,分别服务于项目核心链路:

依赖使用位置(源码证据)用途
boost-asio / boost-beastLGTV Companion Service/web_os_client.cpp、LGTV Companion Console/Console.cpp与 WebOS 电视建立 WebSocket 通信(Beast websocket + TLS),实现开关机、API 命令调用
openssl同上,TLS 层为boost::asio::ssl::context提供 TLS 1.2 客户端支持,如 LGTV Companion Service/companion.cpp 中ctx_{ ssl::context::tlsv12_client }
nlohmann-jsonCommon/preferences.cpp、LGTV Companion Updater/updater.cpp解析/生成Config.json配置文件与 API 响应 JSON
phntLGTV Companion User/user_idle_mode.cpp(#include <phnt.h>、<phnt_windows.h>)Windows 原生 API 头,用于实现用户空闲检测(User Idle Mode)
wintoastLGTV Companion Updater/updater.cpp静默更新时向用户弹出 Windows 通知

需要注意一个仓库与文档的差异点:wintoast出现在文档的手动安装命令里,但未列入 vcpkg.json 的依赖清单。从源码看,仓库实际上把 WinToastLib 的源码直接内嵌在 LGTV Companion Updater/WinToastLib 中参与编译,且 updater.cpp 的包含语句留有注释:

#include "WinToastLib/include/wintoastlib.h" // wait for vcpkg action to update and include v1.3.1

可以推断:在 wintoast 上游包更新落地之前,Updater 项目走的是自带源码编译路径,vcpkg 清单里暂未收录它。构建时以仓库当前工程配置为准即可,文档中的wintoast安装命令可以保留(多装无害),但并非 manifest 构建的必要条件。

构建 Setup 安装包(WiX)

构建安装包的前提是安装文档指定的Heatwave for VS2022扩展(即 FireGiant 提供的 WiX Toolset 可视化支持),这样 LGTV Companion Setup 这个wixproj项目才能在 VS2022 中被正确识别和构建。

该项目的工程文件 LGTV Companion Setup.wixproj 体现了两条关键构建约束:

  1. 基于 WiX v4 SDK:<Project Sdk="WixToolset.Sdk/6.0.0">,并引用WixToolset.Util.wixext、WixToolset.UI.wixext6.0.0 扩展包;
  2. 项目依赖保证顺序:通过ProjectReference引用 Console、Service、UI、Updater、User 五个 C++ 项目,RefTargetDir均为INSTALLFOLDER,即先编译各 exe、再打包安装程序。

安装脚本主体 LGTV Companion Setup/Product.wxs(WiX v4 语法)声明了:

  • 产品信息:Version="5.5.7"、ProductCode="{F15B3AD8-6571-45BF-9A42-34D19021203F}",文件头部注释提醒发版时需更新ProductCodeGUID 与版本号;
  • 打包内容:LGTVsvc.exe、LGTV Companion.exe、LGTVdaemon.exe、LGTVcli.exe、LGTVupdater.exe、mainicon.ico,以及 LGTVCdaemon.xml 与 LGTVCother.xml 两份计划任务定义文件;
  • 自定义操作:安装时静默执行LGTVsvc.exe -install注册服务、用schtasks.exe创建/更新“静默更新任务”“守护进程任务”等,卸载时删除对应计划任务。

因此完整的构建顺序是:先按前两种方式装好 vcpkg 依赖并编译 5 个 C++ 项目,再构建 Setup 项目生成 msi 安装包。

构建自检清单

完成构建后,可对照以下要点确认结果:

  1. 选定的 配置×平台(如Release|x64)下,输出目录应包含上表 5 个 exe,其名称由各项目TargetName决定,而非项目名;
  2. 若使用 Manifest:确认相关项目的 "Use Manifest"(VcpkgEnableManifest)已为 Yes,且 vcpkg.json 中的 5 个依赖能正常解析安装;
  3. 若使用手动方式:确认x64-windows-static与arm64-windows-static两组 triplet 的包都已安装,与工程VcpkgTriplet设置一致;
  4. 安装包项目要求 Heatwave 扩展已装入 VS2022,且 5 个被引用的 C++ 项目已先期编译成功;
  5. 构建环境限定为 Windows + VS2022(工具集 v143);本文所有结论以当前仓库(LGTVCompanion.sln 声明 VS2022/17 版本格式、Product.wxs 版本 5.5.7)为准。
  • 桌面应用
  • CLI
  • 智能硬件

【免费下载链接】LGTVCompanion

Power On and Off WebOS LG TVs together with your PC

项目地址:https://gitcode.com/gh_mirrors/lg/LGTVCompanion
点击查看免费下载

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/23 14:21:58

混合架构下etcd集群部署实战:从二进制准备到性能调优

1. 为什么要在混合架构节点上部署etcd集群第一次在amd64和arm64混搭的节点上部署etcd集群&#xff0c;是在一个边缘计算场景里。当时手头有三台机器&#xff1a;两台x86的旧服务器&#xff0c;一台arm64的开发板。业务侧要求控制面组件必须高可用&#xff0c;而etcd作为Kuberne…

作者头像 李华
网站建设 2026/10/22 16:00:05

后端架构面试(二):线上瓶颈排查与流量保护

CPU 和系统负载上涨&#xff0c;是否意味着算力不足&#xff1f;发布后接口变慢&#xff0c;是旧实例容量减少&#xff0c;还是新实例尚未预热&#xff1f;业务流量突然增长&#xff0c;又该先限流还是先扩容&#xff1f; 本文从资源指标、发布过程和流量来源三个角度展开&…

作者头像 李华
网站建设 2026/10/22 9:32:50

Cloudpods MCP Server 深度解析:用 MCP 协议把 climc 能力暴露给 AI 客户端

后端云原生运维虚拟化人工智能AI 应用 【免费下载链接】cloudpods 开源、云原生的多云管理及混合云融合平台 项目地址&#xff1a; https://gitcode.com/yunionio/cloudpods 点击查看 免费下载 Cloudpods MCP Server 是 Cloudpods 多云管理平台提供的 AI 能力网关&#xff1a;…

作者头像 李华
网站建设 2026/10/20 14:37:27

0基础学网安,先学网络还是Linux?

不少零基础想要入行网络安全的同学&#xff0c;心中都存在这样的疑问&#xff1a;零基础学网安&#xff0c;先学Linux还是计算机网络?答案是&#xff1a;优先务实计算机网络基础&#xff0c;同步入门Linux基础&#xff0c;不建议学完一门再开启另外一门。计算机网络是网络安全…

作者头像 李华