- 桌面应用
- CLI
- 智能硬件
【免费下载链接】LGTVCompanion
Power On and Off WebOS LG TVs together with your PC
本文基于仓库文档 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 UI | LGTV Companion.exe | 配置界面 |
| LGTV Companion Service | LGTVsvc.exe | 后台 Windows 服务,核心逻辑 |
| LGTV Companion User | LGTVdaemon.exe | 用户态守护进程(Daemon) |
| LGTV Companion Console | LGTVcli.exe | 命令行工具 |
| LGTV Companion Updater | LGTVupdater.exe | 静默更新器 |
| LGTV Companion Setup | LGTV 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 命令。文档给出的启用步骤是:
- 在解决方案中打开每个项目的“属性”页面;
- 进入 vcpkg 相关选项区,将"Use Manifest"(使用 Manifest)设为 "Yes";
- 对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-staticARM64 平台(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-statictriplet 与项目配置如何对应
这些命令里的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-beast | LGTV 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-json | Common/preferences.cpp、LGTV Companion Updater/updater.cpp | 解析/生成Config.json配置文件与 API 响应 JSON |
| phnt | LGTV Companion User/user_idle_mode.cpp(#include <phnt.h>、<phnt_windows.h>) | Windows 原生 API 头,用于实现用户空闲检测(User Idle Mode) |
| wintoast | LGTV 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 体现了两条关键构建约束:
- 基于 WiX v4 SDK:
<Project Sdk="WixToolset.Sdk/6.0.0">,并引用WixToolset.Util.wixext、WixToolset.UI.wixext6.0.0 扩展包; - 项目依赖保证顺序:通过
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 安装包。
构建自检清单
完成构建后,可对照以下要点确认结果:
- 选定的 配置×平台(如
Release|x64)下,输出目录应包含上表 5 个 exe,其名称由各项目TargetName决定,而非项目名; - 若使用 Manifest:确认相关项目的 "Use Manifest"(
VcpkgEnableManifest)已为 Yes,且 vcpkg.json 中的 5 个依赖能正常解析安装; - 若使用手动方式:确认
x64-windows-static与arm64-windows-static两组 triplet 的包都已安装,与工程VcpkgTriplet设置一致; - 安装包项目要求 Heatwave 扩展已装入 VS2022,且 5 个被引用的 C++ 项目已先期编译成功;
- 构建环境限定为 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
相关推荐
在 Slackware 上安装 Qtile:SlackBuild 包、slpkg 与手动依赖安装指南
在 Slackware 上安装 Qtile:SlackBuild 包、slpkg 与手动依赖安装指南 本文以 Qtile 官方文档中的 Slackware 安装
桌面应用操作系统WPF UI Visual Studio 2022 扩展安装指南:三种安装方式与项目模板实战详解
WPF UI Visual Studio 2022 扩展安装指南:三种安装方式与项目模板实战详解 本篇技术指南围绕 WPF UI 项目官方提供的 Visual
UI组件桌面应用Luanti(Minetest)Windows MSVC 编译实战指南:vcpkg 依赖管理、Visual Studio 构建与 WiX 打包
Luanti(Minetest)Windows MSVC 编译实战指南:vcpkg 依赖管理、Visual Studio 构建与 WiX 打包 本篇指南以仓库官
游戏开发图形学
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考