Linux问题排查-找到偷偷写文件的进程
在 Linux 系统中,若要通过已修改的文件找到修改该文件的进程 PID,可以结合以下方法分析,具体取决于文件是否仍被进程打开或已被删除但句柄仍存在:
一、文件仍被进程打开(未删除)
如果文件当前正在被某个进程修改且未关闭/删除,可通过以下方式查找:
1. lsof
命令(推荐)
lsof
(List Open Files)可列出系统中所有打开的文件及对应的进程信息。
命令格式:
lsof <文件路径>
示例:
lsof /var/log/syslog
输出解读:
PID
列:修改文件的进程 PID。USER
列:进程所属用户。FD
列:文件描述符(u
表示读写模式,r
表示只读,w
表示写入)。
2. fuser
命令
fuser
用于查找使用指定文件的进程。
命令格式:
fuser -v <文件路径>
示例:
fuser -v /tmp/test.txt
输出解读:
USER
列:进程所属用户。PID
列:占用文件的进程 PID。TYPE
列:文件类型(如cwd
表示当前工作目录,txt
表示可执行文件,mem
表示内存映射)。
二、文件已被删除但进程仍持有句柄
若文件已被删除(如通过 rm
命令删除),但进程仍在写入该文件(未关闭文件句柄),此时文件在磁盘上已不可见,但可通过进程的虚拟文件系统(/proc
)查看:
1. 通过 /proc/<PID>/fd
查找
每个进程的文件描述符存储在 /proc/<PID>/fd/
目录下,即使文件已删除,仍可能存在指向该文件的句柄(显示为 (deleted)
)。
步骤:
-
遍历所有进程的
fd
目录:for pid in /proc/[0-9]*; dols -l $pid/fd 2>/dev/null | grep "deleted" | grep "<文件名片段>" done
(将
<文件名片段>
替换为已删除文件的部分名称,如test.txt
) -
示例输出:
lrwx------ 1 root root 64 Jun 5 14:30 3 -> /tmp/test.txt (deleted)
- 上述输出表示 PID 对应目录下的文件描述符 3 指向已删除的
/tmp/test.txt
,该进程正在写入该文件。
- 上述输出表示 PID 对应目录下的文件描述符 3 指向已删除的
2. lsof
命令直接查询(支持已删除文件)
lsof
可直接列出已删除但仍被进程打开的文件:
lsof | grep "deleted" | grep "<文件名片段>"
示例输出:
vim 12345 user 3r REG 8,1 1234 56789 /tmp/test.txt (deleted)
PID=12345
的进程(此处为vim
)正在以只读模式(3r
)打开已删除的文件。
三、通过文件修改时间和进程日志辅助定位
若无法通过上述方法直接定位(如文件已关闭且未被删除),可结合以下间接方式:
1. 查看文件修改时间
通过 stat
命令获取文件最后修改时间:
stat /path/to/file
- 记录时间戳后,结合系统日志(如
syslog
、auditd
)或进程监控工具(如ps aux --sort=-etime
)查找该时间段内活跃的进程。
2. 使用 auditd
审计系统
若系统启用了 auditd
(审计服务),可配置规则监控文件修改事件:
-
添加审计规则:
auditctl -w /path/to/file -p wa -k file_modify
(监控文件的写入(
w
)和属性修改(a
)事件) -
触发修改后,查看审计日志:
ausearch -k file_modify | grep pid
- 输出中会包含修改文件的进程 PID 和用户信息。
四、总结:常用命令速查表
场景 | 命令示例 | 说明 |
---|---|---|
文件未删除,查找进程 | lsof /path/to/file | 直接列出打开文件的进程 |
文件未删除,快速定位 | fuser -v /path/to/file | 显示占用文件的进程及权限 |
文件已删除,查找句柄 | `lsof | grep “deleted” |
遍历进程 fd 目录 | for pid in /proc/[0-9]*; do ls -l $pid/fd; done | 手动筛查文件描述符 |
注意事项
- 权限问题:部分文件(如系统文件)需
root
权限才能查看。 - 时效性:若进程已关闭文件或重启,将无法通过上述方法定位。 这个问题下面的案例可以实现
- 日志依赖:
auditd
等功能需提前配置,否则无法追溯历史修改事件。
根据文件是否被删除及当前状态,选择合适的工具组合即可高效定位修改文件的进程 PID。
案例:
现在/tmp目录被写入了一个/tmp/20250514080520642/68244ec00b4743533ed841b6 的文件,如何编写一个shell的监控程序,可以在下一次进程些文件的时候,可以获取进程信息。
在传统的 comm
命令中,-z
选项并非标准选项(可能仅在某些特定系统或版本中存在)。当出现 comm: 无效选项 -- z
错误时,说明当前系统的 comm
不支持带 NUL
分隔符的 z
参数。此时需要调整脚本逻辑,改用其他方式处理包含特殊字符(如换行符)的文件路径。以下是修改后的脚本,移除 comm -z
并改用文本行处理:
修正后的轮询监控脚本(兼容传统 comm)
#!/bin/bash# 纯 shell 实现的 /tmp 目录监控脚本(修复 comm -z 错误)
# 使用方法: ./monitor_tmp_polling.sh [轮询间隔(秒)] [输出日志文件]POLL_INTERVAL="${1:-1}" # 默认轮询间隔 1 秒
LOG_FILE="${2:-/tmp/tmp_writes_monitor.log}"
TMP_DIR="/tmp"# 创建日志文件
touch "$LOG_FILE" || { echo "无法创建日志文件 $LOG_FILE" >&2; exit 1; }echo "=== 开始监控 $TMP_DIR 目录的写入操作 (轮询间隔: ${POLL_INTERVAL}s) ===" | tee -a "$LOG_FILE"
echo "日志文件: $LOG_FILE"
echo "按 Ctrl+C 停止监控"
echo# 初始文件列表(每行一个文件路径)
OLD_FILES=$(mktemp)
find "$TMP_DIR" -type f -print 2>/dev/null | sort > "$OLD_FILES"# 清理函数
cleanup() {rm -f "$OLD_FILES" "$NEW_FILES"echo "=== 监控已停止 ===" | tee -a "$LOG_FILE"exit
}trap cleanup SIGINT SIGTERMwhile true; do# 新文件列表(每行一个文件路径)NEW_FILES=$(mktemp)find "$TMP_DIR" -type f -print 2>/dev/null | sort > "$NEW_FILES"# 找出新增的文件(通过 comm 对比,排除已存在的文件)NEW_FILES_LIST=$(comm -13 "$OLD_FILES" "$NEW_FILES") # 移除 -z 选项if [ -n "$NEW_FILES_LIST" ]; thentimestamp=$(date +"%Y-%m-%d %H:%M:%S")echo "[$timestamp] 检测到 $(echo "$NEW_FILES_LIST" | wc -l) 个新文件" | tee -a "$LOG_FILE"# 处理每个新增文件(逐行读取,兼容含空格的文件名)while IFS= read -r file; doecho "[$timestamp] 新文件: $file" | tee -a "$LOG_FILE"# 尝试查找打开该文件的进程lsof_output=$(lsof "$file" 2>/dev/null)if [ -n "$lsof_output" ]; then# 提取进程信息(跳过表头)pids=$(echo "$lsof_output" | awk 'NR>1 {print $2}')echo "[$timestamp] 发现 $(echo "$pids" | wc -w) 个进程正在访问该文件:" | tee -a "$LOG_FILE"echo "$lsof_output" | tee -a "$LOG_FILE"echo | tee -a "$LOG_FILE"# 为每个进程获取详细信息for pid in $pids; doecho "[$timestamp] 进程 $pid 的详细信息:" | tee -a "$LOG_FILE"ps -p "$pid" -o user,pid,ppid,cmd,%cpu,%mem,start,etime | tee -a "$LOG_FILE"# 获取进程打开的所有文件描述符echo "[$timestamp] 进程 $pid 打开的文件描述符:" | tee -a "$LOG_FILE"ls -l /proc/"$pid"/fd 2>/dev/null | tee -a "$LOG_FILE"echo | tee -a "$LOG_FILE"doneelseecho "[$timestamp] 未找到访问该文件的进程 (可能已关闭文件句柄)" | tee -a "$LOG_FILE"echo | tee -a "$LOG_FILE"fidone <<< "$NEW_FILES_LIST"fi# 更新文件列表mv "$NEW_FILES" "$OLD_FILES"# 等待下一个轮询周期sleep "$POLL_INTERVAL"
done
使用说明
与之前的脚本相同,直接运行即可:
chmod +x monitor_tmp_polling.sh
./monitor_tmp_polling.sh # 默认轮询间隔 1 秒,日志存于 /tmp/tmp_writes_monitor.log
相关文章:
Linux问题排查-找到偷偷写文件的进程
在 Linux 系统中,若要通过已修改的文件找到修改该文件的进程 PID,可以结合以下方法分析,具体取决于文件是否仍被进程打开或已被删除但句柄仍存在: 一、文件仍被进程打开(未删除) 如果文件当前正在被某个进…...
Linux的权限问题
引入:权限的意义是什么? 权限就是为了让人能做某些事或不能做某些事 一:Linux下的用户种类 Linux下只有两种用户:root 和 普通用户 root:拥有至高无上的权限,任何的权限都不能限制root 普通用户…...
WPF技巧-BindingProxy
WPF技巧-BindingProxy 文章目录 WPF技巧-BindingProxy🔍 分析与解释1. **继承 Freezable**2. **重写 CreateInstanceCore 方法**3. **定义 DependencyProperty:Data** ✅ 使用场景场景说明:解决方案:示例 XAML: &#…...
深度解析:Redis 性能优化全方位指南
Redis 作为当前最流行的内存数据库之一,以其高性能、低延迟和丰富的数据结构支持,被广泛应用于缓存、消息队列、实时统计等场景。然而,随着业务规模的增长,Redis 可能面临性能瓶颈,如高延迟、内存不足、吞吐量下降等问…...
OpenHarmony外设驱动使用 (五),Fingerprint_auth
OpenHarmony外设驱动使用 (五) Fingerprint_auth 概述 功能简介 指纹认证是端侧设备不可或缺的功能,为设备提供用户认证能力,可应用于设备解锁、支付、应用登录等身份认证场景。用户注册指纹后,指纹认证模块就可为设…...
.NET外挂系列:2. 了解强大的 harmony 注解特性
一:背景 1. 讲故事 上一篇我们简单的聊了下harmony外挂的基本玩法,让大家宏观上感受到了外挂在 .NET高级调试 领域的威力,这一篇我们从 注解特性 这个角度继续展开。 二:harmony 注解特性 1. HarmonyPatch 解读 在harmony支持…...
【Arm】应用ArmDS移植最小FreeRTOS系统
一、文档背景 FreeRTOS(Free Real-Time Operating System)是一个开源的实时操作系统内核,广泛应用于嵌入式系统。它具有小巧、灵活、低功耗等特点,支持多任务调度、信号量、队列等实时操作系统基本功能。 将FreeRTOS移植到特定硬…...
Python----目标检测(labelimg和labelme的安装与使用,Pycharm配置教程)
一、labelimg labelimg是一款开源的图像标注工具,标签可用于分类和目标检测,它是用python写的,并使用Qt作为其图形界面,简单好用(虽然是英文版的)。其注释以 PASCAL VOC格式保存为XML文件,这是I…...
Axure跨页面交互:利用IFrame和JS实现父子页面菜单联动
在 Axure 中使用内联框架(IFrame)进行父子页面间的通信是一个非常有效的技巧,尤其是在需要实现复杂交互逻辑时。通过 JavaScript 直接操作 DOM 元素,可以突破 Axure 基础元件的限制,实现更灵活的页面联动。以下是对你描…...
百度飞桨OCR(PP-OCRv4_server_det|PP-OCRv4_server_rec_doc)文本识别-Java项目实践
什么是OCR? OCR(Optical Character Recognition,光学字符识别)是一种通过技术手段将图像或扫描件中的文字内容转换为可编辑、可搜索的文本格式(如TXT、Word、PDF等)的技术。它广泛应用于文档数字化、信息提取、自动化…...
救生衣穿戴检测数据集VOC+YOLO格式2171张2类别
数据集格式:Pascal VOC格式YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数):2171 标注数量(xml文件个数):2171 标注数量(txt文件个数):2171 …...
JAVA请求vllm的api服务报错Unsupported upgrade request、 Invalid HTTP request received.
环境: vllm 0.8.5 java 17 Qwen3-32B-FP8 问题描述: JAVA请求vllm的api服务报错Unsupported upgrade request、 Invalid HTTP request received. WARNING: Unsupported upgrade request. INFO: - "POST /v1/chat/completions HTTP/1.1&…...
信号量基础入门:并发控制的核心概念
问题的复杂性产生的根本原因在于,如 2.2 节所述,共享变量的访问始终是“单向信息流”。也就是说,一个进程可以分配新值或检查当前值,但这种检查不会为其他进程留下任何痕迹。结果是,当一个进程想要对共享变量的当前值作…...
物联网之使用Vertx实现HTTP/WebSocket最佳实践
小伙伴们,你们好呀,我是老寇,跟我一起学习使用Vertx实现HTTP-Server和WebSocket-Server 实现Http/WebSocket【响应式】 Vertx-Web地址 实现过程 查看源码 代码比较简单,懒得讲解啦 代码比较简单,懒得讲解啦 代码…...
【神经网络与深度学习】GAN 生成对抗训练模型在实际训练中很容易判别器收敛,生成器发散
引言部分 在深度学习领域,生成对抗网络(GAN)是一种强大的数据生成方法,它通过生成器(G)和判别器(D)之间的博弈来不断优化模型。然而,在实际训练过程中,GAN 往…...
使用 NGINX 的 `ngx_http_secure_link_module` 模块保护资源链接
一、模块简介 版本:自 NGINX 0.7.18 起引入 功能: 签名校验:对请求 URI 中的签名进行校验,保证链接未经篡改。时效控制:根据请求中携带的过期时间,判断链接是否仍在有效期。 启用方式:编译 NG…...
5月19日day30打卡
模块和库的导入 知识点回顾: 导入官方库的三种手段导入自定义库/模块的方式导入库/模块的核心逻辑:找到根目录(python解释器的目录和终端的目录不一致) 作业:自己新建几个不同路径文件尝试下如何导入 一、导入官方库 …...
NW860NW894美光闪存颗粒NX770NX789
在数字化浪潮席卷全球的当下,数据存储技术的革新正以惊人的速度推动着硬件性能的边界。美光科技作为半导体存储领域的领军者,其NW860、NW894、NX770、NX789系列闪存颗粒凭借前沿架构与精密工艺,成为高性能存储解决方案的核心载体。本文将深入…...
高性能锁机制 CAS:Java 并发编程中的深度剖析
引言 在并发编程领域,i操作的非线程安全性是开发者们熟知的问题。这一现象根源在于i并非原子操作,其内部执行过程包含读取、修改和写入三个步骤,在多线程环境下极易因线程切换导致数据竞争与不一致,这与我们此前探讨的多线程常见问…...
leetcode 每日一题 1931. 用三种不同颜色为网格涂色
题目 1931. 用三种不同颜色为网格涂色 思路 先获取列表,上下左右的所有情况。解决一维的问题 然后所有一维的问题暴力循环。已知一个一维的解,可以对应其他一维解的列表(用于记忆化搜索) 然后使用递归,进行累加 代…...
解决Windows磁盘管理中因夹卷导致的无法分区问题
解决Windows磁盘管理中因夹卷导致的无法分区问题 在现代计算机管理中,磁盘分区是一个常见且重要的操作。无论是为了优化存储空间,还是为了实现多系统安装,合理的磁盘分区都是必不可少的。然而,许多用户在使用Windows磁盘管理工具…...
龙虎榜——20250519
上证指数缩量收十字星,个股涨多跌少,这周反弹的概率比较大。 深证指数缩量调整,临近反弹,个股表现更好。 2025年5月19日龙虎榜行业方向分析 化工(新能源材料国产替代) • 代表个股:红宝丽、…...
Python在自动驾驶数据清洗中的应用
Python在自动驾驶数据清洗中的应用 在自动驾驶领域,数据是算法的燃料。高质量的数据意味着更精准的模型,更稳定的驾驶体验。然而,原始数据通常充满噪声、缺失值、不一致格式,甚至有异常点,这些都会严重影响自动驾驶系统的可靠性。因此,数据清洗是一道绕不开的关卡。 一…...
腾讯云Mysql实现远程链接
1.SQL语句:CREATE USER remote_user% IDENTIFIED BY YourPassword; GRANT ALL PRIVILEGES ON *.* TO remote_user%; FLUSH PRIVILEGES; 2.设置入站规则 3.设置安全组 4.效果...
大模型(2)——提示工程(Prompt Engineering)
文章目录 一、提示工程的核心概念为什么需要提示工程? 二、提示设计的基本原则三、实用提示工程技巧1. 角色设定法2. 示例引导法(Few-Shot Learning)3. 分阶段提问4. 负面约束5. 温度(Temperature)控制 四、不同任务类…...
深入Java G1 GC调优:如何解决高延迟与吞吐量瓶颈
引言 Java的垃圾回收(GC)机制是JVM性能的核心,但即使是最先进的G1(Garbage-First)收集器,在复杂场景下仍可能引发长时间停顿(Stop-The-World, STW)或吞吐量骤降。许多开发者虽然熟…...
DAPO:用于指令微调的直接偏好优化解读
一、背景与动机:从RLHF到DPO,再到DAPO 大型语言模型(LLM)经过海量无监督预训练后,往往需要对齐人类偏好或遵循指令的微调,使模型的回答更符合人类期望。这一过程通常通过人类反馈强化学习(RLHF)来实现。例如OpenAI的ChatGPT就使用了RLHF:先让人工标注对模型输出进行偏…...
vue2、vue3项目打包生成txt文件-自动记录打包日期:git版本、当前分支、提交人姓名、提交日期、提交描述等信息 和 前端项目的版本号json文件
vue2 打包生成text文件 和 前端项目的版本号json文件 项目打包生成txt文件-自动记录git版本、当前分支、提交人姓名、提交日期、提交描述等信息生成版本号json文件-自动记录当前版本号、打包时间等信息新建branch-version-webpack-plugin.js文件 // 同步子进程 const execSyn…...
iOS解码实现
import Foundation import VideoToolboxclass KFVideoDecoderInputPacket {var sampleBuffer: CMSampleBuffer? }class KFVideoDecoder {// MARK: - 常量private let kDecoderRetrySessionMaxCount 5private let kDecoderDecodeFrameFailedMaxCount 20// MARK: - 回调var pi…...
Windows中PDF TXT Excel Word PPT等Office文件在预览窗格无法预览的终级解决方法大全
Windows中PDF TXT Excel Word PPT等Office文件在预览窗格无法预览的终级解决方法大全 参考链接: https://zhuanlan.zhihu.com/p/454259765...
在Excel中使用函数公式时,常见错误对应不同的典型问题
在Excel中使用函数公式时,常见错误对应不同的典型问题 1. #DIV/0!(除以零错误)2. #N/A(值不可用)3. #NAME?(名称错误)4. #NULL!(空交集错误)5. #NUM!(数值错…...
Excel
1.快捷键 CtrlE 快速填充 CtrlQ 快速分析 CtrlEnter 原位填充 Tab 横向移动到下一个单元格 Enter 移动到下一行起始位置对应单元格 Shift 返回上一个单元格 0空格分数 显示分数 1.if if(condition,true,false)if(A1>10,"true","fa…...
Rust 学习笔记:错误处理
Rust 学习笔记:错误处理 Rust 学习笔记:错误处理不可恢复的错误带有结果的可恢复错误匹配不同的错误出现错误时 panic 的快捷方式:unwrap 和 expect传播错误传播错误的快捷方式:? 操作符哪里可以使用 ? 操作符 panic or not pan…...
【Linux】系统指令与开发全栈(vim、ssh、gcc)
【Linux】系统指令与开发全栈(vim、ssh、gcc) 一、Linux 系统指令大全 1、文件与目录管理 基础操作 指令参数说明典型用例注意事项cd~ 家目录,- 返回上级,.. 上级目录cd ~/Documents 进入文档目录无目录权限时会报错ls-l 详情&am…...
用 CodeBuddy 搭建「MiniGoal 小目标打卡器」:一次流畅的 UniApp 开发体验
我正在参加CodeBuddy「首席试玩官」内容创作大赛,本文所使用的 CodeBuddy 免费下载链接:腾讯云代码助手 CodeBuddy - AI 时代的智能编程伙伴 在日常生活中,我们总是希望能够坚持一些小习惯,比如每天锻炼十分钟、读一页书、早睡十分…...
前端(vue)学习笔记(CLASS 6):路由进阶
1、路由的封装抽离 将之前写在main.js文件中的路由配置与规则抽离出来,放置在router/index.js文件中,再将其导入回main.js文件中,即可实现路由的封装抽离 例如 //index.js import { createMemoryHistory, createRouter } from vue-routerim…...
ubuntu 安装 Redis新版Redis 7.x
以下是在Ubuntu系统中安装Redis的详细指南, 一、官方APT源安装 sudo apt install redis-server -y 默认安装最新APT源版本(Ubuntu 22.04通常为Redis 6.x) 服务自动启动,配置文件路径:/etc/redis/redis.conf验证安装 …...
Httphelper: Http请求webapi小记
文章目录 1、HttpHelper.cs Framework4.812、HttpHelper.cs NET83、JsonHelper.cs Framework4.814、JsonHelper.cs NET85、uniapp request.js 访问WEBAPI 每次查找、测试都比较费事,记录一下把 1、HttpHelper.cs Framework4.81 using System; using System.IO; usi…...
【Linux】进程控制(进程创建、进程终止、进程等待、进程替换)
目录 一、进程创建 1、fork函数 2、页表权限 二、进程终止 1、main函数返回值(退出码) 2、常见错误码及其对应的错误描述: 将错误退出码转化为错误描述的方法: 3、进程退出的三种场景 4、由上我们可以知道: 5…...
java+selenium专题->启动浏览器下篇
1.简介 上一篇文章,我们已经在搭建的java项目环境中实践了,今天就在基于maven项目的环境中演示一下。 2.eclipse中新建maven项目 1.依次点击eclipse的file - new - other ,如下图所示: 2.在搜索框输入关键字“maven”ÿ…...
sqlserver 循环删除1000行
在SQL Server中,如果你想循环删除1000行数据,有几种方法可以实现,但值得注意的是,频繁使用循环删除操作可能会对数据库性能造成影响,尤其是在处理大量数据时。下面介绍几种方法,并讨论它们的优缺点。 方法…...
亚信电子与联发科技携手打造AIoT新未来
[台湾新竹讯, 2025年5月19日] 智能物联网(AIoT)融合人工智能与物联网技术,通过边缘AI的实时数据分析及设备智能联网能力,加速智能物联网创新应用的蓬勃发展。为满足AIoT产业对多网络端口的应用需求,全球半导体公司【联…...
【成品设计】基于STM32的人体健康监测系统
《基于STM32的人体健康监测系统》 Ps:有4个版本。 V1硬件设计: 主控:STM32F103C8T6:作为系统主控芯片。 血氧心率传感器:用于采集当前心率、血氧值。 温湿度传感器:用于采集当前环境温湿度。 有源低电平触发蜂鸣器&…...
【MySQL进阶】了解linux操作系统下mysql的配置文件和常用选项
前言 🌟🌟本期讲解关于linux下mysql配置选项的详细介绍~~~ 🌈感兴趣的小伙伴看一看小编主页:GGBondlctrl-CSDN博客 🔥 你的点赞就是小编不断更新的最大动力 🎆那么…...
LeetCode 219.存在重复元素 II
目录 题目: 题目描述: 题目链接: 思路: 核心思路: 思路详解: 代码: C代码: Java代码: 题目: 题目描述: 题目链接: 219. 存…...
解释:神经网络
在过去的10年里,表现最好的artificial-intelligence系统——比如智能手机上的语音识别器或谷歌最新的自动翻译——都是由一种叫做“深度学习”的技术产生的 深度学习实际上是一种被称为神经网络的人工智能方法的新名称,这种方法已经流行了70多年。1944年…...
Java 泛型详解
在 Java 的类型系统中,泛型(Generics) 是一个非常重要的特性。它让我们能够编写更通用、更安全的代码,尤其是在处理集合类(如 List、Map 等)时,泛型的使用可以大大减少类型转换的麻烦࿰…...
React集成百度【JSAPI Three】教程(001):快速入门
文章目录 1、快速入门1.1 创建react项目1.2 安装与配置1.3 静态资源配置1.4 配置百度地图AK1.5 第一个DEMO1、快速入门 JSAPI Three版本是一套基于Three.js的三维数字孪生版本地图服务引擎,一套引擎即可支持2D、2.5D、3D全能力的地理投影与数据源加载,帮助开发者轻松搞定平面…...
WPF中资源(Resource)与嵌入的资源(Embedded Resource)的区别及使用场景详解
🌟 开发WPF项目时图片、SVG、配置文件等到底该设置为哪种资源?如何正确读取、跨程序集访问?一篇文章全解答。 在使用 WPF 进行项目开发时,很多开发者在设置文件“生成操作(Build Action)”时,常常会在“资源(Resource)”和“嵌入的资源(Embedded Resource)”之间感…...
如何在 Windows 11 或 10 上安装 Fliqlo 时钟屏保
了解如何在 Windows 11 或 10 上安装 Fliqlo,为您的 PC 或笔记本电脑屏幕添加一个翻转时钟屏保以显示时间。 Fliqlo 是一款适用于 Windows 和 macOS 平台的免费时钟屏保。它也适用于移动设备,但仅限于 iPhone 和 iPad。Fliqlo 的主要功能是在用户不活动时在 PC 或笔记本电脑…...