Qt Windows应用管理员权限启动:UAC机制、清单配置与QMake实战
1. 项目概述与核心痛点在Windows平台上用Qt开发桌面应用尤其是那些需要操作注册表、写入系统目录、或者监听特定端口的程序时一个绕不开的坎就是用户账户控制UAC。你精心打包的程序用户双击运行时屏幕上突然弹出一个蓝黄相间的盾牌图标要求“是否允许此应用对你的设备进行更改”。对于普通用户这可能会引起困惑和警惕对于需要静默安装或后台运行的工具这更是直接导致功能失败。我自己就踩过不少坑比如一个需要向C:\ProgramData写入配置文件的工具在标准用户权限下直接报“拒绝访问”体验非常糟糕。这个项目的核心就是解决如何让我们的Qt可执行程序在Windows下默认以管理员权限启动而无需用户每次手动“以管理员身份运行”。这不仅仅是加个清单文件那么简单它涉及到编译链的选择MinGW还是MSVC、构建系统的配置QMake还是CMake以及最终安装包的制作策略。网上很多教程只讲其一不讲其二导致开发者跟着做了一半发现另一条路走不通。今天我就结合自己用QMake构建系统在MinGW和MSVC两种编译器下的实战经验把完整的流程、背后的原理以及那些容易踩的坑给你一次性讲透。2. 权限提升的原理与Windows UAC机制要解决问题得先明白问题从哪来。Windows Vista之后引入的UAC本质上是一种最小权限原则的实践。即使用户登录的是管理员账户其启动的进程默认也运行在标准用户权限下。只有当进程明确声明需要提升权限并且经过用户确认后才能获得完整的管理员令牌。这个“声明”就体现在可执行文件的嵌入资源上。Windows PE格式的可执行文件可以包含一个清单Manifest资源。这个清单是一个XML文件其中有一个关键字段叫requestedExecutionLevel。它的值决定了程序启动时的权限行为asInvoker以调用者的权限级别运行默认。如果用户是标准用户程序就是标准权限如果是管理员且已提权程序就是管理员权限。它不会主动触发UAC弹窗。requireAdministrator要求以管理员权限运行。只要启动就会触发UAC弹窗请求提升权限。highestAvailable以当前用户能获得的最高权限运行。如果用户是管理员组成员则会触发UAC提权如果是标准用户则直接以标准权限运行。我们的目标就是把程序的清单从默认的asInvoker修改为requireAdministrator。这样无论用户如何启动程序双击、命令行系统都会识别到这个要求并触发提权流程。那么这个清单是怎么被“嵌入”到exe里的呢主要有两种方式编译时嵌入将一个独立的.manifest文件作为资源在链接阶段与代码一起打包进最终的exe。这是最干净、最推荐的方式。外部清单在exe同级目录下放置一个名为程序名.exe.manifest的文件。系统会优先查找并加载此外部清单。这种方式便于调试但不适合分发因为文件容易被误删。对于Qt项目我们通常采用第一种方式通过修改.pro文件指导构建系统在编译链接过程中完成清单的嵌入。3. 环境准备与编译器差异辨析在动手之前必须清楚你用的编译环境因为MinGW和MSVC在处理资源文件上路径不同。这往往是很多教程让人困惑的地方。MinGW (Minimalist GNU for Windows) 它使用GNU工具链g, ld。在链接和资源处理上它更接近Linux下的习惯。它依赖一个叫windres的程序来处理资源编译将.rc文件编译成.o或.res文件。MinGW对路径中的空格和特殊字符相对敏感。MSVC (Microsoft Visual C) 微软自家的编译器使用rc.exe和link.exe。它与Windows SDK深度集成处理清单和资源是“原生”的。其资源编译器rc.exe对清单文件的支持更直接。关键差异点对于清单文件MSVC的链接器可以直接在命令行通过/MANIFEST和/MANIFESTINPUT等选项指定。而MinGW工具链本身不直接支持在链接时嵌入清单我们需要绕个弯通过创建一个资源文件.rc文件来“包含”这个清单然后将这个资源文件和其他目标文件一起链接。所以我们的技术路线图是创建一个声明了requireAdministrator的app.manifest文件。根据编译器创建对应的资源脚本文件.rc。在.pro文件中配置让构建系统在编译时包含这个资源文件。4. 核心文件创建与配置详解4.1 创建应用程序清单文件首先在你的Qt项目根目录下创建一个名为app.manifest的XML文件。这个文件是通用的无论MinGW还是MSVC都需要它。?xml version1.0 encodingUTF-8 standaloneyes? assembly xmlnsurn:schemas-microsoft-com:asm.v1 manifestVersion1.0 trustInfo xmlnsurn:schemas-microsoft-com:asm.v3 security requestedPrivileges !-- 关键在这里将 level 从 asInvoker 改为 requireAdministrator -- requestedExecutionLevel levelrequireAdministrator uiAccessfalse/ /requestedPrivileges /security /trustInfo !-- 以下是兼容性设置可确保程序在更高版本的Windows上以正确模式运行 -- compatibility xmlnsurn:schemas-microsoft-com:compatibility.v1 application !-- 支持 Windows 10/11 -- supportedOS Id{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}/ !-- 支持 Windows 8.1 -- supportedOS Id{1f676c76-80e1-4239-95bb-83d0f6d0da78}/ !-- 支持 Windows 8 -- supportedOS Id{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}/ !-- 支持 Windows 7 -- supportedOS Id{35138b9a-5d96-4fbd-8e2d-a2440225f93a}/ /application /compatibility /assembly注意uiAccessfalse通常保持为false。只有当程序需要绕过安全限制与更高权限级别的窗口交互时如辅助技术软件才需要设置为true并且程序必须被签名并安装到受信任的位置如Program Files这带来了极大的复杂性99%的应用不需要。4.2 为MinGW创建资源脚本文件针对MinGW我们需要创建一个app.rc文件。这个文件的作用是告诉windres要把app.manifest文件作为RT_MANIFEST类型的资源且资源ID为1嵌入到exe中。// app.rc #include windows.h // 资源ID 1 通常用于应用程序清单 CREATEPROCESS_MANIFEST_RESOURCE_ID RT_MANIFEST app.manifest这里有个大坑CREATEPROCESS_MANIFEST_RESOURCE_ID这个常量在MinGW的头文件中可能没有直接定义。它的值是1。所以更稳妥、兼容性更好的写法是直接使用数字// app.rc - 推荐写法 1 RT_MANIFEST app.manifest这一行代码的意思是定义一个ID为1的资源类型为RT_MANIFEST内容来自文件app.manifest。4.3 为MSVC创建资源脚本文件MSVC的.rc文件语法略有不同它使用RCDATA来包含清单文件并且资源ID必须是1。// app.rc (for MSVC) #include windows.h 1 RT_MANIFEST app.manifest是的看起来和MinGW的推荐写法一样。但在实际处理逻辑上MSVC的rc.exe和链接器对它的解释更“原生”。为了清晰你可以创建两个文件比如app_mingw.rc和app_msvc.rc或者在.pro文件中用条件判断来生成。4.4 配置QMake项目文件 (.pro)这是将上述文件集成到构建过程的核心。我们需要在.pro文件中添加条件判断针对不同的编译器套件进行配置。# 你的项目配置例如 QT core gui greaterThan(QT_MAJOR_VERSION, 4): QT widgets TARGET MyAdminApp TEMPLATE app SOURCES main.cpp ... HEADERS ... # --- 管理员权限配置开始 --- # 定义清单文件 MANIFEST app.manifest # 判断编译器类型 win32 { # 无论是哪种编译器都先确保清单文件被包含在部署中可选便于查看 DISTFILES $$MANIFEST contains(QMAKE_HOST.os, Windows) { # MSVC 编译器 contains(QMAKE_CXX, cl.exe) { RC_FILE app.rc # 使用为MSVC准备的rc文件 # 另一种更直接的MSVC方法通过链接器标志QMake可能不会完美传递所有链接器标志但可以尝试 # QMAKE_LFLAGS /MANIFESTINPUT:$$shell_path($$MANIFEST) # 上述方法有时不如RC_FILE可靠 } # MinGW 编译器 else { # 指定资源文件 RC_FILE app.rc # 使用为MinGW准备的rc文件 # 对于MinGW必须确保.rc文件被正确编译。RC_FILE变量会让QMake调用windres。 } } } # --- 管理员权限配置结束 ---关键解释win32 { ... }确保这些配置只在Windows平台生效。contains(QMAKE_CXX, cl.exe)这是判断当前激活的编译器是否为MSVCcl.exe是其编译器的常用方法。在Qt Creator的Kits里如果你选择了“Desktop Qt 5.15.2 MSVC2019 64-bit”这样的套件这里就会为真。RC_FILE这是一个特殊的QMake变量。当它被设置时QMake会在构建过程中自动调用资源编译器对MinGW是windres对MSVC是rc.exe来处理指定的.rc文件并将其链接到最终的可执行文件中。为什么不直接用QMAKE_LFLAGS添加链接参数对于MSVC理论上可以用/MANIFESTINPUT:但QMake在生成nmake或msbuild的工程文件时对这类复杂链接器参数的处理有时会出问题导致清单未嵌入。使用RC_FILE是经过大量项目验证的、最兼容QMake构建系统的方式。5. 完整构建流程与验证步骤配置好.pro文件后接下来就是标准的构建流程但其中有一些细节需要特别注意。5.1 构建流程实操清理项目在Qt Creator中先执行“构建”-“清理所有项目”或“清除构建目录”。这是非常重要的一步因为构建系统可能缓存了之前的资源信息不清理可能导致新的清单文件未被应用。执行qmake点击Qt Creator左侧项目面板的“执行qmake”那个锤子旁边的小齿轮图标或者从菜单选择“构建”-“执行qmake”。这一步会让QMake重新解析.pro文件生成包含新资源编译规则的Makefile或.vcxproj文件。重新构建点击“构建”-“重新构建项目”。这会编译所有源代码并链接资源。5.2 验证权限提升是否生效构建成功后不能光看程序能不能运行要用工具验证清单是否真的嵌入成功。方法一使用系统工具最直接找到生成的exe文件通常在build-xxx-Release或debug子目录下。右键点击exe文件选择“属性”。切换到“兼容性”选项卡。如果你看到**“以管理员身份运行此程序”这个复选框被自动勾选并且是灰色不可取消的状态**那么恭喜你清单嵌入成功了因为系统检测到了requireAdministrator请求所以自动帮你勾选了。方法二使用资源查看工具更底层使用Visual Studio自带的mt.exe清单工具。如果你安装了VS或Windows SDK可以在命令行中运行mt.exe -inputresource:你的程序.exe;#1 -out:extracted.manifest如果成功会导出一个extracted.manifest文件用文本编辑器打开它查看requestedExecutionLevel的值。使用第三方工具如Resource Hacker。打开exe文件在左侧资源树中展开RT_MANIFEST查看资源ID为1的内容应该就是你写的XML。方法三运行时观察直接双击运行程序。如果成功你应该会看到UAC提权弹窗。如果在已具有管理员权限的命令行例如以管理员身份运行的Qt Creator或终端中启动则程序会直接以管理员权限运行没有弹窗。6. 常见问题与深度排查指南即使按照步骤操作你也可能会遇到问题。下面是我总结的常见坑点及解决方案。6.1 清单文件未生效无UAC弹窗兼容性选项卡无勾选这是最常见的问题。原因1构建缓存未清理。解决务必执行上述“构建流程”中的第1步和第2步清理 执行qmake。对于QMake有时甚至需要手动删除整个构建目录再重新打开项目。原因2.rc文件语法错误或路径问题。排查检查构建输出窗口Qt Creator下方的“4 编译输出”。在链接阶段之前应该能看到资源编译器的调用信息例如对于MinGW是windres ... app.rc -o xyz.o对于MSVC是rc.exe /fo xyz.res ...。如果没看到说明.rc文件未被加入编译流程。解决确认.pro文件中的RC_FILE路径正确。如果.rc文件不在项目根目录需要写相对路径如resources/app.rc。路径中尽量不要有中文或空格。原因3清单资源ID不是1。排查用Resource Hacker打开exe查看RT_MANIFEST下资源的ID。必须是1。Windows系统在查找嵌入清单时默认只认ID为1的RT_MANIFEST资源。解决确保你的.rc文件中正确定义了1 RT_MANIFEST app.manifest。原因4清单XML格式错误。排查将app.manifest复制出来用浏览器的XML验证工具或xmllint检查语法。一个常见的错误是编码问题确保文件保存为UTF-8 without BOM格式大多数代码编辑器都可选。解决修正XML错误。6.2 程序图标消失或错乱有时在添加.rc文件后程序的自定义图标不见了变成了默认的白色窗口图标。原因.rc文件中也包含了图标定义。如果你之前是通过QMake的ICON变量如RC_ICONS myapp.ico来设置图标的QMake会自动生成一个临时的.rc文件来包含图标。现在你手动指定了RC_FILEQMake就不会再自动生成那个临时文件了图标定义也就丢失了。解决将图标定义也整合到你自己的.rc文件中。// app.rc (MinGW 完整示例) #include windows.h // 应用程序清单ID必须为1 1 RT_MANIFEST app.manifest // 应用程序图标ID可以自定义但EXE主图标通常用ID 1000或类似值 IDI_ICON1 ICON myapp.ico然后在.pro文件中移除RC_ICONS那一行确保只通过RC_FILE指定一个资源文件。6.3 MinGW下编译错误“windres: unknown resource type”原因MinGW版本的windres可能对RT_MANIFEST这个资源类型名不认识。虽然Windows头文件里有定义但有些较老或精简版的MinGW可能有问题。解决使用资源类型的数字代码。RT_MANIFEST对应的数字是24。所以可以将.rc文件改为// app.rc for MinGW (兼容写法) 1 24 app.manifest这种纯数字的写法兼容性最强。6.4 调试版本(Debug)和发布版本(Release)行为不一致原因你可能只在一个构建套件如MSVC2019 64bit Release下配置了.pro但切换到Debug或其他套件如MinGW时.pro文件中的条件判断可能因为QMAKE_CXX等内容不同而未生效。解决在Qt Creator中确保为每个你使用的“构建套件(Kit)”都执行了qmake和重新构建。检查不同构建目录下的中间文件看是否都生成了对应的.res或.o资源文件。6.5 已提权的程序创建的子进程权限问题这是一个高级但重要的问题。假设你的主程序A成功以管理员权限运行然后它使用QProcess启动另一个你自己的程序B。B并不会自动继承管理员权限它将以默认的asInvoker级别启动除非B自己也嵌入了requireAdministrator清单。如果你需要B也以管理员权限运行有几种策略给B也添加清单如果B是一个独立的工具这是最清晰的做法。使用ShellExecute with runas在程序A中以特定方式启动B。在Windows API中可以使用ShellExecuteEx并设置lpVerb为runas。在Qt中可以借助QProcess::startDetached并配合一些Windows特定的参数设置但这通常需要直接调用WinAPI比较复杂。权限继承不推荐在创建进程时传递令牌这涉及到Windows安全编程非常复杂且容易引入安全漏洞一般桌面应用不推荐。7. 进阶话题安装程序与持续集成考量让开发环境下的exe提权只是第一步。当你要分发软件时还需要考虑安装环节。7.1 安装程序Installer的权限即使用户安装的是一个需要管理员权限的程序安装包本身如.msi或.exe安装程序也应该请求提升权限。对于使用Qt Installer Framework制作的安装包你可以在config.xml中配置RunProgramTargetDir/MyApp.exe/RunProgram !-- 如果需要安装程序本身提权需要在生成安装包时配置 -- !-- 对于二进制安装程序通常其自身清单也需要 requireAdministrator --实际上更常见的做法是让安装程序自身嵌入requireAdministrator清单这样它一开始就会请求权限从而有能力向Program Files目录写入文件、写注册表等。7.2 程序发布后的数字签名对于需要提权的程序强烈建议进行数字签名。没有签名的程序在触发UAC时弹出的窗口会显示“发布者未知”并且背景是黄色的这会显著降低用户的信任度甚至被安全软件拦截。代码签名证书可以向证书颁发机构CA购买。7.3 在CI/CD中自动化处理如果你使用Jenkins、GitLab CI等自动化构建需要确保构建环境中包含了正确的资源编译器。对于MSVC构建机需要安装对应版本的Visual Studio Build Tools或Windows SDK。对于MinGW构建机需要安装MinGW工具链并确保windres在系统路径中。 在构建脚本中同样需要执行qmake和重新构建的步骤确保清单被重新嵌入。8. 替代方案与QMake vs CMake的简要对比除了修改.pro文件嵌入清单还有其他几种方法但各有优劣外部清单文件如前所述将app.manifest重命名为MyApp.exe.manifest并放在exe旁边。仅适用于调试正式分发极易丢失。使用mt.exe后期处理构建完成后用mt.exe -manifest app.manifest -outputresource:MyApp.exe;#1命令手动嵌入。这可以作为CI/CD中的一个步骤但增加了构建流程的复杂性。修改Qt安装目录下的默认清单极不推荐Qt在链接时可能会嵌入一个默认的清单。有文章提到修改Qt目录下的qtvars.pro等文件。千万不要这样做这会污染你的Qt开发环境影响所有其他项目并且在你升级Qt或换到其他电脑时完全失效。关于CMake如果你使用CMake管理Qt项目原理完全相同。你需要创建相同的app.manifest和app.rc文件然后在CMakeLists.txt中使用qt_add_executable或add_executable后通过set_target_properties命令来设置RC_FILE属性。if (WIN32) set(MANIFEST ${CMAKE_CURRENT_SOURCE_DIR}/app.manifest) set(RC_FILE ${CMAKE_CURRENT_SOURCE_DIR}/app.rc) set_target_properties(MyAdminApp PROPERTIES WIN32_EXECUTABLE TRUE # MSVC 和 MinGW 通常都能正确处理 RC_FILE RC_FILE ${RC_FILE} ) endif()CMake的处理方式通常更统一因为资源文件的编译被抽象成了目标的一个属性。回过头看通过QMake配置实现管理员权限启动核心就是理解Windows的清单机制并利用RC_FILE这个桥梁让不同的编译器工具链都能正确地把我们的权限声明打包进最终的程序里。整个过程像是一场精密的装配任何一个环节的错位——比如清单ID不对、资源文件没被编译、或者构建缓存捣乱——都会导致失败。我最开始做这个的时候就是在清理缓存这一步上反复折腾了好久总以为是代码写错了。所以当你遇到问题时别急着怀疑人生按照验证步骤一步步来从构建输出信息看起用工具检查最终产物大部分问题都能定位。最后记住给程序提权是一把双刃剑它解决了访问系统资源的问题但也意味着你的程序需要承担更高的安全责任代码要写得更健壮发布前做好测试和签名才能给用户一个既强大又安心的体验。

相关新闻

Wireshark网络抓包实战:从协议解析到故障排查

Wireshark网络抓包实战:从协议解析到故障排查

1. 项目概述:从“看见”网络流量开始如果你曾经好奇过,当你在浏览器里输入一个网址按下回车,到网页加载出来这短短一两秒里,你的电脑和远方的服务器之间到底“聊”了些什么,那么Wireshark就是你最好的“翻译官”和“记…

2026/9/21 20:22:06 阅读更多 →
Ubuntu启动卡在loading initial ramdisk的排查与修复指南

Ubuntu启动卡在loading initial ramdisk的排查与修复指南

1. 问题现象与本质:为什么Ubuntu会卡在“loading initial ramdisk”?如果你正在经历Ubuntu开机时屏幕一片漆黑,或者卡在“loading initial ramdisk”这个界面上,看着那个光标闪烁却永远进不了系统,那种感觉确实很糟心。…

2026/9/19 4:24:35 阅读更多 →
职场人会议录音怎么整理?讯飞听见、Ai好记、通义听悟、听脑AI四款实测

职场人会议录音怎么整理?讯飞听见、Ai好记、通义听悟、听脑AI四款实测

上周开了三个会,加起来将近五个小时,周一要交会议纪要。我看着手机里几段录音,头皮发麻。 说实话,整理会议录音这件事,做过的人都知道有多痛苦。一句话没听清要倒回去重听,发言人换来换去根本分不清谁说了…

2026/9/20 8:30:59 阅读更多 →

最新新闻

3个坑解决福建移动通信网上营业厅性能瓶颈

3个坑解决福建移动通信网上营业厅性能瓶颈

3个坑解决福建移动通信网上营业厅性能瓶颈 看了一堆教程还是不会写项目?别急,问题往往出在你对底层逻辑的忽视。以福建移动通信网上营业厅这类高并发业务系统为例,很多开发者只盯着业务代码,却忽略了源码解析中的性能陷阱。…

2026/9/21 20:21:26 阅读更多 →
Mercury 的 OpenClaw Gateway 模型路由,改到 TaoToken 通道再测 DeepSeek-V3 行不行?

Mercury 的 OpenClaw Gateway 模型路由,改到 TaoToken 通道再测 DeepSeek-V3 行不行?

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/21 20:21:26 阅读更多 →
把 Claude Code 的 ANTHROPIC_BASE_URL 改到 TaoToken 后,安装认证一次过

把 Claude Code 的 ANTHROPIC_BASE_URL 改到 TaoToken 后,安装认证一次过

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/21 20:21:26 阅读更多 →
CANN ops-math 算子库 aclnnEqual 接口详解:Tensor 全量相等性判定与两段式调用实践

CANN ops-math 算子库 aclnnEqual 接口详解:Tensor 全量相等性判定与两段式调用实践

算子库人工智能CANN 【免费下载链接】ops-math 本项目是CANN提供的数学类基础计算算子库,实现网络在NPU上加速计算。 项目地址: https://gitcode.com/cann/ops-math 点击查看 免费下载 aclnnEqual 是 CANN ops-math 数学算子库中 TensorEqual 算子面向昇…

2026/9/21 20:21:26 阅读更多 →
超级苍蝇一文搞懂:版本升级API全变后的生存指南

超级苍蝇一文搞懂:版本升级API全变后的生存指南

超级苍蝇一文搞懂:版本升级API全变后的生存指南 版本升级后 API 全变了,你的代码还在报错吗?别慌,很多开发者都卡在这一步。今天这篇教程,带你 一文搞懂 【超级苍蝇】的核心逻辑与实战技巧。 概念速懂:它到底是什么…

2026/9/21 20:21:25 阅读更多 →
Unity草地性能优化:包围盒、Instancing与Shader精简

Unity草地性能优化:包围盒、Instancing与Shader精简

1. 为什么“草地绘制”在Unity里从来不是个简单功能很多人第一次打开Unity想给地形铺点草,点开Terrain组件,找到Paint Details,拖进一个草的prefab,调调密度、高度、颜色——看起来挺顺。但不出三天,项目就卡在三个问题…

2026/9/21 20:20:25 阅读更多 →

日新闻

agents-generator 决策矩阵全解析:从项目检测到 AGENTS.md 规则生成的 16 步判定流程

agents-generator 决策矩阵全解析:从项目检测到 AGENTS.md 规则生成的 16 步判定流程

agents-generator 决策矩阵全解析:从项目检测到 AGENTS.md 规则生成的 16 步判定流程 【免费下载链接】agentic-awesome-skills AAS Core is the local, agent-first control plane for complete catalog discovery, agent-owned selection, stack validation, and …

2026/9/21 0:00:01 阅读更多 →
gin-vue-admin 前端工具函数全景指南:src/utils 复用规范与源码级解析

gin-vue-admin 前端工具函数全景指南:src/utils 复用规范与源码级解析

gin-vue-admin 前端工具函数全景指南:src/utils 复用规范与源码级解析 【免费下载链接】gin-vue-admin 🚀ViteVue3Gin拥有AI辅助的基础开发平台,企业级业务AI开发解决方案,内置mcp辅助服务,内置skills管理,…

2026/9/21 0:00:01 阅读更多 →
Wox 全功能插件开发实战指南:基于 Python / Node.js 宿主与 WebSocket 的持久化插件体系

Wox 全功能插件开发实战指南:基于 Python / Node.js 宿主与 WebSocket 的持久化插件体系

桌面应用AI 应用插件系统 【免费下载链接】Wox A cross-platform launcher that simply works 项目地址: https://gitcode.com/gh_mirrors/wo/Wox 点击查看 免费下载 全功能插件(Full-featured Plugin)是 Wox 三类插件实现方式中能力最完整的…

2026/9/21 0:00:01 阅读更多 →

周新闻

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

直接铺开项目本身吧。这几个月我一直在折腾一件事:用Flutter给OpenHarmony做一款游戏集合类的App,说白了就是把若干小游戏塞进一个壳里,用统一入口分发。这个方向本身不算新鲜,真正让我花了不少心思的,是首页那堆游戏卡…

2026/9/21 3:13:20 阅读更多 →
Word表格编号全攻略:从列表编号到题注交叉引用

Word表格编号全攻略:从列表编号到题注交叉引用

写Word文档,最让人头疼的往往是那些“看起来不起眼”的小问题。比如表格编号这事:今天在表后面多加了两个空白行,明天给客户交稿前发现整个章节的编号全部错位,光是挨个改序号就能耗掉大半个下午。我前阵子帮人整理一份上百页的技…

2026/9/21 2:19:36 阅读更多 →
从第一个站到第二个站:独立开发者的静态网站选型与落地实践

从第一个站到第二个站:独立开发者的静态网站选型与落地实践

1. 项目概述1.1 核心需求解析做独立开发者这几年,说实话,第一个网站上线的那天晚上我兴奋得没睡着。但等它跑了半年,流量惨淡、功能臃肿、代码自己都懒得看第二遍之后,我才慢慢琢磨明白一个道理:第一个网站是练手&…

2026/9/21 4:51:05 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

2026/9/21 15:36:51 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

2026/9/21 15:36:51 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/19 23:35:34 阅读更多 →