Mr. Kin's Blog

计算机知识分享/软件应用讲解

1   安卓系统免杀后台进程设置步骤(包含各个安卓系统)

https://dontkillmyapp.com/

2   在保留root的情况下(保留Magisk)升级系统

  1. 更新到提示你“立即安装”这一步,先不要点
  2. 调出Magisk小窗,点Magisk旁边的安装,选择安装到未使用的槽位,然后会提示你重启,不要点重启,点“立即安装”会自动重启
  3. 重启后检查更新,检查Magisk、ROOT还在不在,再把模块都打开再重启一遍检查

3   参考资料

[1] Realme真我GT Neo3更新系统会掉ROOT吗-怎么保留Magsik更新系统[EB/OL]. http://m.romjd.com/reviews/content/6069.

1   Bash终端

1.1   符号输入控制

  • ctrl+c:停止
  • ctrl+z:停止输入

2   基础命令

  • 关机:
    • poweroff(也是调用shutdown工具链实现)
    • halt(实际调用shutdown -h)
    • shutdown -h now
    • init 0(init是所有进程的祖先,他是Linux系统操作中不可缺少的程序之一。它的进程号始终为1,所以发送TERM信号给init会终止所有的用户进程,shutdown就是使用这种机制。init定义了8个运行级别(runlevel),init 0为关机,init 1为重启。)
  • 重启
    • reboot
    • shutdown -r now(root权限可使用)
    • init 1

3   包管理器

3.1   apt

3.1.1   apt update证书验证错误

错误信息:Certificate verification failed: The certificate is NOT trusted.

1
sudo apt install --reinstall ca-certificates

4   编译问题

4.1   编译环境的常规配置

以ubuntu举例,下载和更新相关的依赖:

1
2
3
4
apt update
apt upgrade
apt install linux‑headers‑amd64 # 若失败,则先通过上面两条更新系统(因为/etc/apt/sources.list 源 repo 没有目前系统内核的 header,被移除了)除非换 repo branch
apt install build‑essential

4.2   源码编译的程序的安装和卸载

常规的编译安装过程:

1
2
3
4
# 建议是添加prefix参数指定安装路径,日后卸载程序只需删除该目录以及删除软链接(如果有创建的话)
sudo ./configure --prefix=/path_to_install
sudo make -j32
make install

卸载方式:

  • 反安装target: make uninstall/distclean/veryclean
  • make install之后目录下有一个install_mainfest.txt的文件记录安装的所有内容:xargs rm < install_manifest.txt
  • 若未指定prefix且没有install_mainfest.txt,临时目录重新安装:./configure --prefix=/tmp/to_remove && make install,遍历/tmp/to_remove内的文件,把最初安装诶只的文件删除(缺点:部分文件夹可能无法删除,无法确定是系统安装或者源码编译安装)
  • debian系列linux可尝试使用auto-apt 和 checkinstall:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    apt install auto-apt checkinstall
    # 构建生成deb包
    auto-apt run ./configure
    make
    checkinstall
    # 完全卸载包,包名在checkinstall后有提示
    dpkg -r packagename
    # 用生成的deb包重新安装
    dpkg -i ***.deb
    # 列出包中安装的文件位置
    dpkg -L packagename
    # 检查是否安装成功
    dpkg -l | grep packagename
    # 同上
    apt list --installed | grep packagename

4.3   普通用户导致的编译问题

普通用户中如果在系统关键目录中,如/opt,执行sudo make可能会出现xxx command not found,这是因为有些命令在sudo下是不可见的,但如果不用sudomake又无法在这些路径生成文件。

解决方式:使用make -f参数指定makefile文件,让它在有权限的路径中工作。例如,将工作路径切到home目录中,make -f /opt/xxx/xxx/makefilemake可在home路径中生成文件。

4.4   常见编译错误

  • make /lib/modules/xxx/build no such file or directory:证明无 header
  • 在新系统上编译老驱动可能会遇到'SUBDIRS' was removed in Linux 5.3 Use 'M=' or 'KBUILD_EXTMOD=' instead:这代表驱动太老了,驱动代码的编译流程已不适合新系统。

5   账户管理

5.1   删除账户

1
2
userdel [-r] [user_account] # 切换到其他账户再执行,建议是root账户
userdel -r kin # 删除账户kin,-r参数是移除该账户的home目录和用户邮箱(mail spool)

5.2   自动root登录

1
2
3
4
gedit /etc/gdm/custom.conf
# 在daemon下添加
AutomaticLoginEnable=True
AutomaticLogin=root

5.3   重置密码(ubuntu为例)

  1. 进入到救援模式中,选择root选项(root Drop to root shell prompt),敲一次回车enter键显示:root@ubuntu:~#
  2. 重置密码命令:passwd 系统账户名,按提示输入两次密码确认
  3. exit退出shell,选择resume回到正常启动中。

5.4   帐号和密码文件(/etc/passwd和/etc/shadow)

Linux系统中,所有用户(包括系统管理员root)的账号和密码存储在/etc/passwd和/etc/shadow这两个文件中。其中,passwd保存的是账号,shadow保存的是账号的密码等信息(/etc/passwd只有root才可以修改的,/etc/shadow只有root才能查看)

5.4.1   /etc/passwd

示例:root:x:0:0:root:/root:/bin/bash

上面每一行都代表一个用户,每一行又通过[:]分为7个部分。

  1. 账号名称
  2. 为密码占位符(x表示该账户需要密码才能登录,为空时,账户无须密码即可登录)。原先用来保存密码的,现在密码都放在/etc/shadow中,所以这里显示x。
  3. UID,也就是使用者ID。默认的系统管理员的UID为0,我们添加用户的时候最好使用1000以上的UID,1-1000范围的UID最好保留给系统用。
  4. GID,也就是群组ID
  5. 关于账号的一些说明信息(暂时可以忽略)
  6. 账号的家目录,家目录就是你登陆系统后默认的那个目录
  7. 账号使用的shell。/bin/bash为可登录系统Shell,/sbin/nologin表示账户无法登录系统。

5.4.2   /etc/shadow

示例:root:!:15324:0:99999:7:::

上面每一行都代表一个用户,每一行又通过[:]分为9个部分。

  1. 账户名称(密码需要与账户对应的)
  2. 加密后的密码:如果这一栏的第一个字符为!或者*的话,说明这是一个不能登录的账户,从示例可看出ubuntu默认的就不启用root账户。(账户未设置密码时为空,设置密码后加密显示。!为无效哈希,系统会自动锁定这些账户并阻止登录,通过在/etc/passwd设置/bin/false或者/sbin/nologin实现禁止登录)
  3. 最近改动密码的日期:上次修改密码的时间距离1970年01月01日多少天
  4. 密码不可被变更的天数:设置了这个值,则表示从变更密码的日期算起,多少天内无法再次修改密码,如果是0的话,则没有限制
  5. 密码需要重新变更的天数:密码经常更换才能保证安全,为了提醒某些经常不更换密码的用户,可以设置一个天数,强制让用户更换密码,也就是说该用户的密码会在多少天后过期(默认位99999天,可以理解为永不过期)
  6. 密码过期预警天数:如果在5中设置了密码需要重新变更的天数,则会在密码过期的前多少天进行提醒,提示用户其密码将在多少天后过期
  7. 密码过期的宽恕时间:如果在5中设置的日期过后,用户仍然没有修改密码,则该用户还可以继续使用的天数
  8. 账号失效日期,过了这个日期账号就不能用了
  9. 保留未使用

5.4.3   /etc/shadow文件中密码的加密方式

示例:root:$1$Bg1H/4mz$X89TqH7tpi9dX1B9j5YsF.:14838:0:99999:7:::

示例的密码域:$1$Bg1H/4mz$X89TqH7tpi9dX1B9j5YsF.,密码域密文也是由三部分组成的,即:$id$salt$encrypted,详细参见linux标准源文件passwd.c中的pw_encrypt函数。

加密算法:明文密码和一个叫salt的东西通过函数crypt()完成加密

id为1时,采用md5进行加密;id为5时,采用SHA256进行加密;id为6时,采用SHA512进行加密。

得知加密方式,可以复制密文到相关工具上逆向破解:

6   硬盘和分区管理

6.1   挂载一个新硬盘

1
2
3
4
5
6
7
8
9
lsblk    #查看所有硬盘情况
df -lh #查看硬盘占用情况,以及挂载位置
sudo fdisk -l #查看硬盘分区情况
sudo fdisk /dev/sdb #给硬盘sdb创建分区
sudo mkfs.ext4 /dev/sdb #格式化硬盘sdb,并写入文件系统
sudo mkdir /mnt/pan #创建目录
sudo mount /dev/sdb /mnt/pan #将硬盘sdb挂载到 /mnt/pan 目录
sudo vim /etc/fstab # 设置开机自动挂载
/dev/sdb /mnt/pan ext4 defaults 0 0

6.2   将/home目录挂载到新分区(或新硬盘)

1
2
3
4
5
6
7
8
9
10
11
# 通过包管理器安装 gparted,进行新建分区或者格式化硬盘等操作。
sudo mkdir /mnt/home
sudo mount /dev/新分区 /mnt/home # 挂载新分区到/mnt/home
sudo rsync -aXS /home/ /mnt/home # a归档模式(递归传输并保持文件属性),X保持扩展属性
sudo mv /home /home_old
sudo mkdir /home
sudo umount /dev/新分区
sudo mount /dev/新分区 /home
blkid|grep /dev/新分区 # 查看新分区的uuid
sudo gedit /etc/fstab # 将新分区的uuid填入fstab
sudo rm -rf /home_old # 重启无异常,即可删除旧home目录

6.3   查看硬盘是不是固态硬盘(SSD)

1
2
3
4
5
# 0表明为ssd,1是机械
cat /sys/block/sda/queue/rotational

# 0表明为ssd,1是机械
lsblk -d -o name,rota

7   网络

7.1   查看网卡信息

查看ip信息:

  • windows:ipconfig /a
  • linux: ifconfig(配置网络接口)或者iwconfig(配置无线网络接口)

网卡名称解析:

  • lo:表示local
  • wl:表示wlan(Wireless Local Area Network)无线局域网
  • en:表示ethernet以太网
  • PCI接口的物理位置的坐标(bus, slot),其中bus表示总线,slot表示插槽

例子:

  • wlp3s0表示,WLAN PCI接口位置:bus=3, slot=0。
  • enp2s0表示,Etnernet PCI接口位置:bus=2, slot=0。

7.2   ubuntu配置网卡

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
sudo nano /etc/netplan/01-netcfg.yaml

# 静态ip设置示例
network:
version: 2
renderer: networkd
ethernets:
eth0:
addresses:
- 192.168.1.10/24
gateway4: 192.168.1.1
nameservers:
addresses: [8.8.8.8, 8.8.4.4]

# DHCP设置示例
network:
version: 2
renderer: networkd
ethernets:
eth0:
dhcp4: yes

# 应用网络配置
sudo netplan apply

7.3   ssh登录远程服务器

大部分系统都预装ssh程序客户端,方便连接其他ssh服务器使用,包括windows系统。如果需要设置作为被连接的ssh端,需要自行手动安装ssh的server。

连接命令:ssh 系统账户名@远程服务器ip,例如ssh root@192.168.1.1

查看ssh版本:ssh -V

7.3.1   Ubuntu开启ssh服务及允许root登录

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
sudo apt install openssh-server

# 修改/etc/ssh/sshd_config文件
sudo nano /etc/ssh/sshd_config

# 修改如下字段
#PermitRootLogin prohibit-password
PermitRootLogin yes

# 重启sshd服务
sudo systemctl restart sshd.service

#默认情况下,在Ubuntu 20.04上未设置root用户的密码,当尝试以root用户身份进行SSH登录时,将显示错误消息Permission denied,please try again。因此,我们需要设置root用户的密码。出现提示时,输入当前用户密码,然后输入新的根密码:
sudo passwd
# 输入两次密码确定即可

7.3.1.1   系统自启ssh服务

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# 开机自动启动ssh命令
# 注意在恢复模式中设置sshd自启服务,再次重启到恢复模式中的话,仍然是未启动的,但是按正常模式启动会自启(ubuntu18.04的实测结论)
sudo systemctl enable ssh

# 关闭ssh开机自动启动命令
sudo systemctl disable ssh

# 单次开启ssh
sudo systemctl start ssh

# 单次关闭ssh
sudo systemctl stop ssh

#查看ssh是否启动,看到Active: active (running)即表示成功
sudo systemctl status ssh

# 检查 SSH 守护进程是否已经运行
systemctl status sshd

7.3.2   使用scp传递文件

windows和linux之间传输更推荐使用WinSCP工具。

  1. 下载安装PuTTY
  2. 在PuTTY安装路径中打开终端窗口
  3. 拷贝命令:pscp [Linux用户名]@[Linux服务器ip地址]:[Linux服务器源文件] [本地目标文件夹],示例:pscp d:\Old\test.jpg root@ipaddress:/var/www/html/

7.4   arch linux安装远程软件

P.S.配置好arch的“国内源”和“社区源”,安装yay。

  • 安装teamviewer
    1
    2
    3
    4
    5
    6
    #安装teamviewer
    yay -S teamviewer
    #启动服务
    sudo teamviewer daemon start
    sudo teamviewer daemon enable
    sudo teamviewer daemon restart
  • 安装todesk
    1
    2
    3
    4
    5
    #安装todesk
    yay -S todesk
    #启动服务
    sudo systemctl start todeskd.service
    sudo systemctl enable todeskd.service
  • 安装向日葵
    1
    2
    3
    4
    5
    #安装向日葵
    yay -S sunloginclient
    #启动服务
    sudo systemctl start runsunloginclient.service
    sudo systemctl enable runsunloginclient.service

P.S.若遇到todesk打开系统就注销的问题,尝试下先删除teamviewer再重新安装一下,之后再打开todesk测试(yay社区编译版本的todesk和teamviewer可能存在冲突)。

8   开机排障

8.1   ubuntu恢复模式(recovery mode)/linux救援模式(rescue mode)

救援模式相当于使用 SysV 作为默认的服务管理器的 Linux 发行版中的单用户模式。ubuntu和debian系列常用说法就是恢复模式,其他不同类的linux发行版更多常说救援模式。在救援模式下,将挂载所有本地文件系统,仅启动一些重要服务。但是,不会启动正常服务(例如网络服务)。一般系统无法正常启动时,进入该模式修复,例如重置root。

如果同时需要网络的话,在Recovery Menu中选择network模式即可。

  • 若硬盘挂载失败,会自动进入到救援模式中。修正fstab表中正确的硬盘uuid,之后正确恢复到
  • ubuntu摁一次esc键可以进入可grub选择界面,重复摁会导致无法进入的。进入到grub选择界面后,选择ubuntu的高级选项(Advanced options for Ubuntu)并选择recovery mode进入到救援模式。如果没有可选择的界面,尝试重启长摁SHIFT键或者shift+esc组合键看看,出现后可以使用上下方向键,防止自动读秒。

编辑grub进去到救援模式:

  1. 在grub选择菜单中,选择Ubuntu,按e键进入编辑模式
  2. 在以linux开头的一行末尾,删除字符串$vt_handoff并添加字符串systemd.unit=rescue.target
  3. 修改完成后,按Ctrl+X或者F10,在救援模式中启动
1
2
3
4
5
6
7
8
# 从救援模式切换到紧急模式
systemctl emergency

# 重启
systemctl reboot

# exit退出恢复模式,并选择recovery菜单中的resume选项
exit

8.2   ubuntu紧急模式

在紧急模式中不启动任何东西。没有服务启动、没有挂载点、没有建立套接字,什么也没有。只是一个原始的 shell。

从紧急模式切换到救援模式:systemctl rescue

编辑grub进去到救援模式:

  1. 在grub选择菜单中,选择Ubuntu,按e键进入编辑模式
  2. 在以linux开头的一行末尾,删除字符串$vt_handoff并添加字符串systemd.unit=emergency.target
  3. 修改完成后,按Ctrl+X或者F10,在救援模式中启动

8.3   开机出现initramfs(requires a manual fsck)

问题常见于以下常见场景:

  • 异常断电或者关机引起文件数据损坏
  • 系统无法启动
  • 连接的驱动器(包括闪存驱动器/SD卡这类设备)未按预期工作

解决方法:

1
2
3
# 查看提示中说明是哪个硬盘需要执行fsck修复(文件系统一致性检查),例如sda1
fsck /dev/sda1 -y
# 等执行到出现FILE SYSTEM WAS MODIFIED即可reboot系统

9   参考文献

[1] ubuntu开机出现initramfs(requires a manual fsck)解决办法[EB/OL]. https://www.cnblogs.com/yibeimingyue/p/14261416.html.
[2] 如何在 Ubuntu 18.04 中启动到救援模式或紧急模式[EB/OL]. https://zhuanlan.zhihu.com/p/53902139.
[3] Linux下如何查看一块硬盘是不是固态硬盘(SSD)[EB/OL]. https://blog.csdn.net/qq_42303254/article/details/89317618.
[4] Ubuntu 18.04 apt update failed for https repository[EB/OL]. https://askubuntu.com/questions/1229122/ubuntu‑18‑04‑apt‑update‑failed‑for‑https‑repository.
[5] 将/home 目录挂载到新分区(或新硬盘)[EB/OL]. https://blog.51cto.com/runixcn/4605838.
[6] ubuntu修改密码(详细版)「建议收藏」[EB/OL]. https://cloud.tencent.com/developer/article/2159425.
[7] Linux账号和密码文件 /etc/passwd和/etc/shadow[EB/OL]. https://www.cnblogs.com/fuyuanming/p/6519758.html.
[8] What means * and ! at second field of /etc/shadow?[EB/OL]. https://superuser.com/questions/623881/what-means-and-at-second-field-of-etc-shadow.
[9] SSH and locked users[EB/OL]. http://arlimus.github.io/articles/usepam/.
[10] Linux shadow文件中密码的加密方式[EB/OL]. https://www.cnblogs.com/7-58/p/13328148.html.
[11] 使用root ssh登录ubuntu22.4配置[EB/OL]. https://www.cnblogs.com/waldron/p/16864613.html.
[12] Windows连接ssh、scp到Ubuntu服务器[EB/OL]. https://blog.csdn.net/renshy5/article/details/117735410.
[13] Ubuntu下移动硬盘的分区、格式化、挂载操作[EB/OL]. https://zhuanlan.zhihu.com/p/397440213.
[14] Ubuntu ifconfig 查看网卡信息 lo enp2s0 wlp3s0 具体含义[EB/OL]. https://blog.csdn.net/wuyujin1997/article/details/105460929.
[15] arch linux 安装teamviewer,todesk,向日葵,远程软件方法[EB/OL]. https://www.jianshu.com/p/e4b61f754071.
[16] 怎么卸载用 make install 编译安装的软件?[EB/OL]. https://www.zhihu.com/question/20092756.
[17] Ubuntu网络配置:使用DHCP自动配置网卡[EB/OL]. https://blog.csdn.net/VqaEditor/article/details/133605050.
[18] The Ultimate Guide to Recovery and Rescue Mode in Ubuntu[EB/OL]. https://www.fosslinux.com/113044/the-ultimate-guide-to-recovery-and-rescue-mode-in-ubuntu.htm.
[19] 如何启动 Ubuntu 22.04 进入救援/紧急模式[EB/OL]. https://linux.cn/article-14750-1.html.

1   mongodb

GUI客户端推荐:mongodb compass

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 查询某天的文档
db.getCollection('YSTZ_202305')
.find({
createat: {
$gte: '2023-05-23 00:00:00',
$lte: '2023-05-30 00:00:00'
}
})
.sort({ createat: 1 })
.limit(100000000);


# 排序:其中1为升序排列,而-1是用于降序排列
db.COLLECTION_NAME.find().sort({KEY:1,key2:-1});

# 查看当前操作进度(比如创建索引)
db.currentOp()

2   Navicat

2.1   mongodb导出导入

2.1.1   导入导出数据库

  1. 去MongoDB官网下载MongoDB Command Line Database Tools
  2. 对数据库右键,选择MongoDump,设置刚刚下载解压后的bin下路径的mongodump.exe
  3. 设置保存路径,以gz格式存放
  4. 对新数据库右键,选择MongoRestore,配置路径mongorestore.exe,选择备份文件导入

2.1.2   导入导出表,或者表中部分字段

使用mongoexport,mongoimport功能

2.2   数据迁移

2.2.1   单库迁移

  1. 在目标服务器中创建一个和源服务器数据库名称一样的数据库
  2. 菜单栏>工具>数据传输(填写源服务器和目标服务器的信息,例如ip访问地址)
  3. 下一步即可开始迁移

2.2.2   多库迁移

  1. 在目标服务器中创建一个和源服务器数据库名称一样的数据库
  2. 菜单栏>工具>数据传输(填写源服务器和目标服务器的信息,例如ip访问地址)
  3. 选择保存配置文件,一一为每个数据库都进行这个操作。
  4. 菜单栏>工具>数据传输>自动运行>点击新建批处理操作>点击数据传递,导入前面保存的配置文件。

问题:执行一段复杂的Sql,在mysql命令行下用时较长。

解决方法:做好索引再查询或者更换其他工具(例如mongodb官方工具)进行查询。

3   参考文献

[1] 利用Navicat进行数据迁移[EB/OL]. https://blog.csdn.net/qq_39043762/article/details/118363462.
[2] Navicat导出 导入mongodb数据库(windows)[EB/OL]. https://blog.csdn.net/zjkpy_5/article/details/123952785.

1   Windows系统版本发布日志

2   安装系统

2.1   虚拟机将gho,esd、wim等系统镜像文件加载进pe

虚拟机中,pe系统无法安装扩展工具,因此无法通过启用共享文件夹功能和宿主机传递文件。以下方法可以给pe系统中传递文件

  • 将gho、esd、wim文件打包封装成iso文件,通过CD/DVD虚拟机硬件加载iso文件
  • 映射虚拟磁盘

2.2   使用系统镜像内部自带的Setup.exe安装

WinPE不推荐用这个方法,既然都在pe中,有其他方能够更好实现,没必要使用这个。

一般常见于将镜像作为PE启动盘或者直接在系统内运行。

P.S.在win7-win11系统上都可以直接运行安装(一般我都是用这个方法进行大版本的更新),只不过在WinPE中我们可以删除和格式化系统分区。如果WinPE中无法运行Setup.exe,换一个未深度精简过的PE再尝试。

注意:在WinPE中或者直接作为启动盘,GPT分区注意要启用BIOS的UEFI启动模式,MBR分区启用BIOS的Legacy启动模式。

2.3   PE中使用Dism安装系统镜像

  1. 使用分区工具分好区
  2. 查看镜像中专业版所对应的索引index:Dism /Get-ImageInfo /ImageFile:H:\sources\install.wim
  3. 安装镜像:Dism /apply-image /imagefile:H:\sources\install.wim /index:8 /ApplyDir:W:\
  4. 配置启动文件:bcdboot W:\Windows /s S: /f ALL。MBR分区使用这条命令安装bootmgr和更新mbr:bootsect /nt60 W: /mbr
  5. 重启机器

2.4   win11 OOBE安装跳过强制登录帐号

  • 方案1:拔掉网线,Shift+F10调出cmd窗口:运行:oobe\BypassNRO.cmd,重启继续走OOBE流程,到登录账户页面时会多出一个暂时跳过的选项。(微软似乎通过云端修改策略,该法可能无效,并且要求插网线)
  • 方案2:输入no@thankyou.com触发账户锁定,在登录里输入此账户然后随便输入个字符当做密码点登录,此时系统会弹出错误提醒,然后点击下一步,创建本地账户。其他类似的账户有如下:

2.5   新主板安装win7启动报错蓝屏0x000000a5

问题:理论上1-13代酷睿都可以安装,本质上就是驱动的支持问题(锐龙芯片也是一样)。intel酷睿芯片原生支持win7的是6代,789代可通过注入驱动方式安装(可稳定用),10代及10代以后的也可以装,十分麻烦,需要特别处理BIOS和驱动问题(否则就是无限的a5蓝屏),而且不知道能否稳定用。一般导致a5蓝屏常见也是acpi.sys驱动问题。

3   系统启动项

3.1   EFI NVRAM启动项

具有EFI的硬件,启动项是存储在NVRAM介质中的,EFI固件类似于BIOS固件。在UEFI v2.3.1及之后的版本,可以使用这些工具编辑EFI启动项:

3.2   Windows Boot Manager启动失败,硬盘Disk 0启动成功

故障原因:在操作重装uEFI系统之后,BCD(引导配置数据)条目未正确修改引起的故障。比如,重装系统之后,Windows Boot Manager中的"device"相关参数被删除,因此无法正确启动。

解决方法,有两种:

  • 重建引导:PE系统中,运行%win_drive_letter%:\Windows\System32\bcdboot %win_drive_letter%:\Windows /s %efi_drive_letter%: /f BIOS /l zh-cn
  • CSM模式下,设置第一启动项为硬盘启动项,而不是windows boot manager启动项。

3.3   多系统引导项的默认值设置

  1. WIN+R:msconfig->「引导」->选中我们需要默认启动的操作系统->「设为默认值」
  2. 高级系统设置->高级->启动和故障恢复->设置->默认操作系统

4   微软账户

4.1   退出微软账号

设置步骤:设置->设置->账户->你的信息->改用本地账户登录(停止登录)。

4.2   无法登录微软帐号或者出现0x80190001错误提示

解决方法:

  1. 打开网卡设置属性设置
  2. 关闭ipv6
  3. ipv4的DNS设置4.2.2.1,备用4.2.2.2
  4. cmd终端执行命令刷新dns缓存:ipconfig /flushdns
  5. 重启系统,重新尝试登录(登录成功后建议还原网络设置

5   微软商店应用

5.1   下载微软商店应用离线安装包

微软商店应用下载地址解析站点(下载通道一般选默认的RP):https://store.rg-adguard.net/

微软商店应用在线链接:

5.2   重装微软预装UWP应用

5.2.1   依据AppXManifest.xml重装

cmd命令行终端运行:

1
2
@REM 如果office365hub有打开的话,则强制关闭该进程,通过WWAHost关闭
powershell -command "Get-AppxPackage -AllUsers | Foreach {if (Get-Process -Name \"WWAHost\" -ErrorAction SilentlyContinue) { Stop-Process -Name \"WWAHost\" -Force } ; Add-AppxPackage -DisableDevelopmentMode -Register -ForceApplicationShutdown \"$($_.InstallLocation)\AppXManifest.xml\" }"

powershell终端运行(allUsers参数是针对系统所有账户,verbose参数是输出每条日志信息):

1
Get-AppXPackage -AllUsers -Name Microsoft.MicrosoftEdge | Foreach {Add-AppxPackage -DisableDevelopmentMode -Register "$($_.InstallLocation)\AppXManifest.xml" -Verbose}

5.2.2   根据离线包重装

cmd命令行终端运行(install_uwp_apps函数提供多个参数,可以安装相应依赖包):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
:ps_add_appxpackage
@REM 如果office365hub有打开的话,则强制关闭该进程
tasklist | find "WWAHost.exe" >nul && taskkill /f /im "WWAHost.exe" >nul
echo 开始安装「%~1
powershell -command "Add-AppxPackage -ForceApplicationShutdown '%SystemDrive%\Sysprep\%~1'"
echo.
exit /b

:install_uwp_apps
if "%~1" NEQ "" (
echo 开始安装/更新「%~1
echo.
call :draw_line "-"
echo.
) else (
exit /b
)
if "%~2" NEQ "" (
call :ps_add_appxpackage "%~2"
)
if "%~3" NEQ "" (
call :ps_add_appxpackage "%~3"
)
if "%~4" NEQ "" (
call :ps_add_appxpackage "%~4"
)
if "%~5" NEQ "" (
call :ps_add_appxpackage "%~5"
)
if "%~6" NEQ "" (
call :ps_add_appxpackage "%~6"
)
if "%~7" NEQ "" (
call :ps_add_appxpackage "%~7"
)
if "%~8" NEQ "" (
call :ps_add_appxpackage "%~8"
)
call :draw_line "="
echo.
exit /b

call :install_uwp_apps "微软商店" "Microsoft.UI.Xaml.2.8_8.2310.30001.0_x64__8wekyb3d8bbwe.Appx" "Microsoft.NET.Native.Framework.2.2_2.2.29512.0_x64__8wekyb3d8bbwe.Appx" "Microsoft.NET.Native.Runtime.2.2_2.2.28604.0_x64__8wekyb3d8bbwe.Appx" "Microsoft.VCLibs.140.00_14.0.33519.0_x64__8wekyb3d8bbwe.Appx" "Microsoft.VCLibs.140.00.UWPDesktop_14.0.33519.0_x64__8wekyb3d8bbwe.Appx" "Microsoft.WindowsStore_22403.1401.3.0_neutral_~_8wekyb3d8bbwe.Msixbundle"

5.3   xbox手柄插入提示:无法打开此"ms-gamebar"链接

解决方法:

  1. 重新卸载并安装xbox game bar
  2. 注册表禁用
    1
    2
    reg add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\GameDVR" /v "AppCaptureEnabled" /t "REG_DWORD" /d "0" /f
    reg add "HKCU\System\GameConfigStore" /v "GameDVR_Enabled" /t "REG_DWORD" /d "0" /f

5.4   Win10 LTSC 2021安装微软商店MicrosoftStore

为Windows 10 Enterprise LTSC增加应用商店:使用Github脚本「LTSC-Add-MicrosoftStore-2021

6   运行库

详看《Windows平台的运行库修复》

7   系统更新

7.1   无法连接到更新服务。我们将稍后再试,你也可以立即进行检查。如果问题仍然存在,请确保你已连接到 Internet

  • 解决方法1:执行系统自带诊断程序:C:\Windows\diagnostics\system\WindowsUpdate\DiagPackage.diagpkg
  • 解决方法2:
    1. 查看相关服务项是否正常开启:windows update,Cryptographic Services,Background Intelligent Transfer Service,Windows Installer。
    2. 尝试将网络的dns修改至4.2.2.2或4.2.2.1。
    3. 清理win更新缓存文件夹:先关闭windows update服务,删除C:\Windows\SoftwareDistribution目录下的Download和DataStore文件夹,然后重新开启windows update服务。

8   注册表

教程:了解和掌握Windows操作系统注册表,包括在线和离线修改方法

8.1   查询程序对应修改前后的注册表项

参考文章:

8.1.1   方法一:对比修改前后所有注册表项

  1. 注册表导出命令:Gpresult /scope computer /v >1.txt
  2. 应用修改前先用命令导出注册表项
  3. 修改组策略或者执行应用完成修改
  4. 应用修改后再次用命令导出注册表项
  5. 比较前后即可得出修改的注册表项

8.1.2   方法二:火绒剑查看日志

运行gpedit.msc,实际是mmc.exe打开gpedit.msc。

火绒剑增加mmc.exe的过滤,查看具体修改项。

8.2   默认应用的修改

部分地区的Windows在安装2024年2月份的更新补丁(Windows 10 (KB5034763) and Windows 11 (KB5034765))后,有一个新增的保护驱动c:\windows\system32\drivers\UCPD.sys可能会锁定注册表的值,导致无法通过修改注册表的值来修改默认应用的值,诸如SetUserFTASetDefaultBrowser都会失效。

解决方法:

  • 禁用驱动后SetUserFTA就可以正常使用,powershell运行命令:
    1
    New-ItemProperty -Path “HKLM:\SYSTEM\CurrentControlSet\Services\UCPD” -Name “Start” -Value 4 -PropertyType DWORD -Force
  • 改用dism方式修改默认应用值,详看Export or Import Default Application Associations

9   网络

9.1   网络测试

1
2
3
4
5
6
7
8
9
10
11
# 验证本机 TCP/IP 协议是否安装好
ping 127.0.0.1
# 验证本机 IP 地址是否配置完成或者网卡物理属性是否完好
ping 192.168.1.55
# 验证从本机到网关的物理线路是否连通
ping 192.168.1.1/192.168.0.1
# 目标地址查看电脑与目标机器工作是否正常。
ping
# 目标地址跟踪数据包到达目的主机的路径,可以探测网络故障是发生在哪一个位置
Tracert
# 首先 localhost 是一个域名,在过去它指向 127.0.0.1 这个 IP 地址。在操作系统支持 ipv6 后,它同时还指向 ipv6 的地址 [::1] 。

9.2   win10 ssh客户端

win10 1803版本自带安装ssh客户端,可检查是否已启用。新版都自带安装客户端并自动启动。

使用:ssh username@ip

9.3   win10 ssh服务端并允许空密码连接登录

虽说新版win10已自带安装ssh客户端,但服务端需自行安装设置。

  1. 设置>应用>应用和功能:可选功能
  2. 添加功能:OpenSSH 服务器,选择安装
  3. 管理员权限终端,开启sshd服务
    1
    2
    net start sshd  # 开启
    net stop sshd # 关闭
  4. 设置ssh服务自启:任务管理器>服务>打开服务,将「OpenSSH SSH Server」服务设置为「开机自启」
  5. 编辑文件:C:\ProgramData\ssh\sshd_config,修改如下参数,允许空密码登录:
    修改前:
    1
    2
    3
    # To disable tunneled clear text passwords, change to no here!
    #PasswordAuthentication yes
    #PermitEmptyPasswords no
    修改后:
    1
    2
    3
    # To disable tunneled clear text passwords, change to no here!
    PasswordAuthentication yes
    PermitEmptyPasswords yes
  6. 打开本地安全策略窗口,WIN+R:secpol.msc。本地策略 -> 安全选项:在右侧选中「帐户: 使用空白密码的本地帐户只允许进行控制台登录双击进行编辑」。选择禁用选项确认。
  • 程序主目录:C:\Windows\System32\OpenSSH
  • 配置文件目录:%PROGRAMDATA%\ssh\sshd_config

9.4   win防火墙开启后无法被ping通

两种方案:

  • 关闭防火墙:控制面板->系统和安全->Windows Defender 防火墙->启用或关闭Windows Defender防火墙->全部选择关闭Windows Defender防火墙->点击确定即可。
  • 配置防火墙规则:控制面板->系统和安全->Windows Defender 防火墙->高级设置->入站规则->右键点击「虚拟机监控(回显请求)」所对应的两条记录(或者只启用ICMPv4-In,不启用ICMPv6-In)->点击启用规则。(如果仍然不行,继续启用「文件和打印机共享(回显请求)」,共四条)

9.5   网络抓包分析工具

  • wireshark:抓包分析
  • postman:分析接口
  • nmap:扫描端口

9.6   空密码无密码账户远程桌面连接出错提示用户账户限制

使用远程桌面功能时,报错:`用户账户限制(例如,时间限制)会阻止你登录。请与系统管理员或技术支持联系以获取帮助。

问题原因:因为被控端的远程系统的用户密码为空,且系统默认只允许空白密码的本地账户进行控制台登录。

解决方式(在被控端操作):

  1. 打开本地安全策略窗口,WIN+R:secpol.msc
  2. 本地策略 -> 安全选项:在右侧选中「帐户: 使用空白密码的本地帐户只允许进行控制台登录双击进行编辑」
  3. 选择禁用选项确认。

9.7   win10开启远程桌面功能

设置>系统>远程桌面>启用远程桌面

P.S. 本质上和win7的设置一样,只是在win10的设置中提供了一个接口设置。

9.8   win7启用远程桌面

系统>设置>远程设置>允许远程协助连接这台计算机+允许运行任意版本远程桌面的计算机连接(较不安全)。

如果依旧被拦截,点击「选择用户」,将用户名加入。

9.9   删除远程桌面连接记录

  1. WIN+R键:regedit
  2. 注册表编辑器的地址栏输入地址:计算机\HKEY_CURRENT_USER\Software\Microsoft\Terminal Server Client\Default
  3. 删除不要的记录

9.10   win公用网络切换为专用网络

部分情况「公用网络」的权限缩紧,不少端口都被屏蔽禁用。

  1. 打开本地安全策略窗口:WIN+R:secpol.msc
  2. 网络列表管理器策略
  3. 找到需要修改的网路名称,属性窗口的网络位置标签
  4. 选择位置类型为「专用(R)」,用户权限为「用户不可以更改位置(S)」

10   多语言设置

10.1   切换系统显示语言(包括欢迎屏幕)

这个设置并非完美的,像是设置>游戏设置界面就有可能存在部分元素没法正确切换第二种语言。但99%的系统界面元素基本是能正常切换的。最完美的方案其实还是使用对应语言的系统镜像文件,进行全新安装。

设置界面入口:设置>时间和语言>语言

  1. 添加第二种语言,并将「Windows显示语言」选项设置为自己所需要的语言。
  2. 管理语言设置>欢迎屏幕和新用户账户>复制设置>将当前设置复制到:勾选「欢迎屏幕和系统账户」(这个不设置的话,欢迎屏幕语言无法切换成第二种语言)
  3. 管理语言设置>非Unicode程序的语言>更改系统区域设置>设定「当前系统区域设置」(这个可以根据实际情况调整)
区域语言设置
欢迎屏幕设置

10.2   程序界面语言乱码

一些非Unicode程序的语言,如果开启「(beta版)使用Unicode UTF-8提供全球语言支持」选项,可能会导致程序本身界面语言出现乱码。

解决方法:设置>时间和语言>语言>管理语言设置>非Unicode程序的语言>更改系统区域设置>取消勾选「(beta版)使用Unicode UTF-8提供全球语言支持」。

11   蓝屏(BSOD)

内存转储文件存储路径:

  • 小型内存转储文件:%SystemRoot%\Minidump\
  • 完整内存转储文件:%SystemRoot%\Memory.dmp

关于蓝屏内存转储文件的分析:WinDbg(微软商店搜索安装),文件->Open dump file->加载dmp文件(如果小型转储文件不够信息分析,可以选择其他内存转储类型),相关命令分析如下:

  • !analyze -v:立即查看IMAGE_NAME可知是哪个程序搞的死机/蓝屏/重启(打开dmp文件就可以看到这个标蓝的命令,双击即可执行)
  • !process:查看是哪个进程调用了程序导致崩溃
  • !process 0 0:列出系统内的所有进程
  • 其他调试命令

11.1   蓝屏代码

代码相关链接帖子:

11.2   蓝屏重启:为设备 ROOT\DISPLAY\0000 加载驱动程序 \Driver\WudfRd 失败

查看:事件管理器->Windows日志->系统

1
2
3
4
5
警告	2023/10/13 22:24:23	Kernel-PnP	219	(212)
为设备 ROOT\DISPLAY\0000 加载驱动程序 \Driver\WudfRd 失败。

关键 2023/10/13 22:24:23 Kernel-Power 41 (63)
系统已在未先正常关机的情况下重新启动。如果系统停止响应、发生崩溃或意外断电,则可能会导致此错误。

原因:向日葵远程控制软件引起的故障。经过设备管理器查看向日葵模拟的显卡设备,是会调用Driver\WUDFRd(Windows 用户模式驱动程序框架)。从相关帖子反馈得知,AMD CPU的机器会出现蓝屏重启问题,Intel CPU机器则只会出现报错,但不会重启。

疑似相关帖子:

可能的解决方法:设置->安全->关闭「启用黑屏」。

P.S. 向日葵还可能导致调用显卡设备异常,例如三维软件无法显示模型或者3d mark测试一直报错。详见关于(贝锐)向日葵远程可能导致显卡驱动失效的解决方案

12   显卡

12.1   任务管理器检测不到cuda引擎

若Windows10和Windows11中的任务管理器均检测不到cuda引擎(系统实际也是从Direct 3D接口读取),则是因为系统开启「硬件加速GPU计划」功能。

解决方法:系统设置->系统->屏幕->图形设置->关闭「硬件加速GPU计划」。Windows11默认开启这个功能,Windows10默认禁用该功能。

13   屏幕

13.1   多屏扩展模式的界面显示

通常所有的软件都是默认在主屏的界面打开,但在调整屏幕主次的之前,还有一个规则是优先出现在上一次显示的屏幕中。一般的调整方法如下:

  1. win+shift+上/下箭头(部分人是左/右,待验证):将程序界面在主副屏之间切换;
  2. 打开某一个程序后,把其界面拖到副屏上,下次该程序的界面就会默认在副屏打开。

13.2   高刷显示器闪屏、黑屏

硬件参数举例:PG27UQR,4K160HZ

引起原因:G-Sync功能,高刷信号的DSC数据压缩协议的重新握手,n卡面板中设置关闭。

案例说明:

14   系统信息查看

14.1   系统安装日期

每个大版本号安装都会修改这个值,如果是使用本地镜像文件mct安装覆盖系统的话,同样会修改这个值。

在BIOS时间未正常同步的情况下,若非联网就全新安装和部署系统时,这个系统安装日期可能不准确。

查看方式:

  1. 设置主页->系统->关于->安装日期
  2. 命令行终端运行命令:powershell -c "(Get-CimInstance -ClassName Win32_OperatingSystem).InstallDate

15   系统账户

15.1   报错提示:User Profile Service或ProfSvc服务登录失败

故障原因:常见是系统Default目录缺失或者缺少文件

详细解释:在C盘用户文件目录下,存在着每个用户的登录桌面文件夹,同时还有一个隐藏显示的Default文件夹。当我们进行登录电脑时,系统会做如下逻辑判断:

  1. 先判断是否存在该登录用户的用户文件夹;
  2. 存在登录用户文件夹,则使用该文件夹的桌面配置进行登录;若文件夹内容损坏,则会提示错误;
  3. 不存在登录用户文件夹,则系统会根据Default文件夹复制生成该登录用户的桌面文件夹 进行登录。若Default文件内容损坏,则会提示错误。

解决方法:看看安全模式下能否进入。如果不行,只能是U盘Pe的环境下执行修复。

  1. 删掉登录用户的文件夹,重新进行远程连接,若成功连接,则表示仅仅是登录用户文件损坏;若还无法进行远程登录,则需进行以下步操作。
  2. 删掉登录用户文件夹,删掉Default文件夹,从其他相同系统的服务器拷贝一个Default文件到本服务器。
  3. 为了防止以前的登录信息影响则可以删除注册表中\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList\相关登录用户的注册文件。(如果有相同名称.bak文件夹,和另外没有bak文件夹互换名称,重启电脑)
  4. 重启电脑,则重新使用该用户进行登录远程即可。

16   用户账户控制(UAC)

16.1   快捷键以管理员身份启动应用

win+s搜索>搜索应用名称>ctrl+shift+enter快捷启动,同意uac提权请求

17   声音

17.1   主板麦克风声音小

安装官网的声卡驱动,声音设备的增强开启最大
华硕主板:sonic studio应用中sonic studio effects这个效果关闭。
奥创 AI 降噪:https://www.asus.com/hk/support/faq/1043498/

18   USB设备

18.1   插上U盘不识别,驱动未安装,报错28

  1. 设备管理器,右键异常驱动设备
  2. 更新驱动程序
  3. 浏览我的电脑以查找驱动程序(R)
  4. 选择加载C:\Windows\System32\DriverStore,勾选包含子文文件夹。

P.S.一般手动指定加载后,后续重新拔插相同设备也无需再二次加载。

19   电源计划

19.1   Windows电源计划

19.1.1   隐藏的处理器电源计划设置

通过powercfg命令设置显示(终端管理员身份运行),恢复隐藏使用+ATTRIB_HIDE即可,更多的选项参见「Windows10和11隐藏的处理器电源管理选项」:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
@REM 显示(处理器性能核心放置最小核心数量)
powercfg -attributes SUB_PROCESSOR 0cc5b647-c1df-4637-891a-dec35c318583 -ATTRIB_HIDE

@REM 显示(针对第1类处理器电源效率的处理器性能核心放置最小核心数量)
powercfg -attributes SUB_PROCESSOR 0cc5b647-c1df-4637-891a-dec35c318584 -ATTRIB_HIDE

@REM 显示(生效的异类策略)
powercfg -attributes SUB_PROCESSOR 7f2f5cfa-f10c-4823-b5e1-e93ae85f46b5 -ATTRIB_HIDE

@REM 显示(异类线程调度策略)
powercfg -attributes SUB_PROCESSOR 93b8b6dc-0698-4d1c-9ee4-0644e900c85d -ATTRIB_HIDE

@REM 显示(异类短运行线程调度策略)
powercfg -attributes SUB_PROCESSOR bae08b81-2d5e-4688-ad6a-13243356654b -ATTRIB_HIDE

@REM 显示(延迟敏感度提示处理器性能)
powercfg -attributes SUB_PROCESSOR 619b7505-003b-4e82-b7a6-4dd29c300971 -ATTRIB_HIDE

@REM 显示(针对第 1 类处理器电源效率的延迟敏感度提示处理器性能)
powercfg -attributes SUB_PROCESSOR 619b7505-003b-4e82-b7a6-4dd29c300972 -ATTRIB_HIDE

@REM 显示(允许节流状态)
powercfg -attributes SUB_PROCESSOR 3b04d4fd-1cc7-4f23-ab1c-d1337819c4bb -ATTRIB_HIDE

@REM 显示(处理器性能核心放置过度利用阈值)
powercfg -attributes SUB_PROCESSOR 943c8cb6-6f93-4227-ad87-e9a3feec08d1 -ATTRIB_HIDE

19.1.2   处理器电源管理参数的设置说明

不同的系统的平衡模式下,对处理器的调度有所不同,Windows Server不需要休眠,而Windows10和Windows11都偏向节能和性能的均衡设定,以下对处理器电源管理的部分设定做进一步的说明:

  1. 处理器性能核心放置最小核心数量:此项设定小核心(高效处理器)的休眠设定(在任务管理器中显示该核心为已停止状态),如果设置为100%,代表小核心不再休眠,Windows 10中设置为100%,主要的缘故在于Window10发行时,没有12、13、14代处理器,所以该项设置默认为所有小核不休眠,但Windows11 中设置为4%,代表支持小核心休眠。
  2. 针对第1类处理器电源效率的处理器性能核心放置最小核心数量:此项设定大核心(高性能处理器和超线程)的休眠设定(在任务管理器中显示该核心或超线程为已停止状态),如果设置为100%,代表大核不再休眠,如果设置为50%代表休眠超线程,如果设置为0%代表所有的大核随机休眠。
  3. 生效的异类策略:此项设定为关键设定,Windows提供了4种默认设定:
    • 使用异类策略0:此项设定为Windows11的默认策略。代表所有核心都会休眠,睡眠顺序为优先休眠超线程 -> 小核 -> 大核。如果使用12、13、14代处理器,无论是哪种系统,最好都设为此项策略,可以获得最好的能效处理。
    • 使用异类策略1:此项设定更依赖前面处理器性能核心放置最小核心数量与针对第1类处理器电源效率的处理器性能核心放置最小核心数量,处理器性能放置最小核心数量 负责小核睡眠,针对第1类处理器电源效率的处理器性能核心放置最小核心数量负责大核+超线程睡眠。
    • 使用异类策略2:此设定为大核休眠,只使用小核心
    • 使用异类策略3:此项设定为小核休眠,只使用大核心,选择此项,相当于在BIOS中关闭小核心。
    • 使用异类策略4:此项设定Windows10与WindowsServer的默认设定,为自动随机休眠核心,但如果使用12、13、14代处理器,因为Windows10与Windows Server并没有对大小核心提供支持,因此会经常出现有大核休眠,小核围观的尴尬局面。
  4. 异类线程调度策略/异类短运行线程调度策略
    • 0 所有处理器(平均分配):不建议
    • 1 高性能处理器(只用大核):如果不想使用小核,可以设定为此项
    • 2 首选高性能处理器(大核忙的时候用小核):推荐该项设定,配合前面生效的异类策略0与策略1
    • 3 高效处理器(只用小核):不建议,除非使用12、13、14代处理器但只想用小核。
    • 4 首选高效处理器(小核忙的时候用大核):此项设定也可以选择,平时使用小核,能效方面有好处,但是高负载的时候也会调用大核,选择此项,能获得更好的节能与性能的平衡,但生产力与游戏环境不推荐。
    • 5 自动:此项设定为Windows10与Windows11的默认设定,但如果是12、13、14代处理器,若使用Windows10或Windows Server,不建议设定为自动,因为Windows10与Server都没办法默认处理大小核的自动调度。
  5. 延迟敏感度提示处理器性能/针对第 1 类处理器电源效率的延迟敏感度提示处理器性能:此两项设定主要设定小核/大核的休眠与唤醒的敏感程度,12、13、14代处理器建议设置为Windows11的默认设置99%。能够快速唤醒已停止的处理器核心参与工作,也可以快速让没负载的核心快速的进入停止状态。如果是不希望核心进入休眠状态,随时都打满鸡血,那可以直接设定所有核心与超线程不休眠,永远处于亢奋状态。

19.1.3   处理器电源管理参数的设置

GUI界面设置程序:PowerSettingsExplorer

通过powercfg命令设置(终端管理员身份运行):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
rem 显示(处理器性能核心放置最小核心数量)
powercfg -setdcvalueindex e9a42b02-d5df-448d-aa00-03f14749eb61 SUB_PROCESSOR CPMINCORES 25
powercfg -setacvalueindex e9a42b02-d5df-448d-aa00-03f14749eb61 SUB_PROCESSOR CPMINCORES 25
rem 显示(针对第 1 类处理器电源效率的处理器性能核心放置最小核心数量)
powercfg -setdcvalueindex e9a42b02-d5df-448d-aa00-03f14749eb61 SUB_PROCESSOR CPMINCORES1 25
powercfg -setacvalueindex e9a42b02-d5df-448d-aa00-03f14749eb61 SUB_PROCESSOR CPMINCORES1 25
rem 显示((生效的异类策略)
powercfg -setdcvalueindex e9a42b02-d5df-448d-aa00-03f14749eb61 SUB_PROCESSOR HETEROPOLICY 0
powercfg -setacvalueindex e9a42b02-d5df-448d-aa00-03f14749eb61 SUB_PROCESSOR HETEROPOLICY 0
rem 显示 (异类线程调度策略)
powercfg -setdcvalueindex e9a42b02-d5df-448d-aa00-03f14749eb61 SUB_PROCESSOR 4
powercfg -setacvalueindex e9a42b02-d5df-448d-aa00-03f14749eb61 SUB_PROCESSOR 4
rem 显示(异类短运行线程调度策略)
powercfg -setdcvalueindex e9a42b02-d5df-448d-aa00-03f14749eb61 SUB_PROCESSOR SHORTSCHEDPOLICY 4
powercfg -setacvalueindex e9a42b02-d5df-448d-aa00-03f14749eb61 SUB_PROCESSOR SHORTSCHEDPOLICY 4
rem 显示(延迟敏感度提示处理器性能)
powercfg -setdcvalueindex e9a42b02-d5df-448d-aa00-03f14749eb61 SUB_PROCESSOR LATENCYHINTPERF 99
powercfg -setacvalueindex e9a42b02-d5df-448d-aa00-03f14749eb61 SUB_PROCESSOR LATENCYHINTPERF 99
rem 显示 (针对第 1 类处理器电源效率的延迟敏感度提示处理器性能 )
powercfg -setdcvalueindex e9a42b02-d5df-448d-aa00-03f14749eb61 SUB_PROCESSOR LATENCYHINTPERF1 99
powercfg -setacvalueindex e9a42b02-d5df-448d-aa00-03f14749eb61 SUB_PROCESSOR LATENCYHINTPERF1 99
rem 显示 (允许节流状态)
powercfg -setdcvalueindex e9a42b02-d5df-448d-aa00-03f14749eb61 SUB_PROCESSOR THROTTLING 1
powercfg -setacvalueindex e9a42b02-d5df-448d-aa00-03f14749eb61 SUB_PROCESSOR THROTTLING 1
rem 处理器能源性能首选项策略
powercfg -setdcvalueindex e9a42b02-d5df-448d-aa00-03f14749eb61 SUB_PROCESSOR PERFEPP 100
powercfg -setacvalueindex e9a42b02-d5df-448d-aa00-03f14749eb61 SUB_PROCESSOR PERFEPP 100
rem 处理器性能降低策略
powercfg -setdcvalueindex e9a42b02-d5df-448d-aa00-03f14749eb61 SUB_PROCESSOR PERFDECPOL 2
powercfg -setacvalueindex e9a42b02-d5df-448d-aa00-03f14749eb61 SUB_PROCESSOR PERFDECPOL 2
rem 停用已停用性能状态的处理器性能核心
powercfg -setdcvalueindex e9a42b02-d5df-448d-aa00-03f14749eb61 SUB_PROCESSOR CPPERF 2
powercfg -setacvalueindex e9a42b02-d5df-448d-aa00-03f14749eb61 SUB_PROCESSOR CPPERF 2
rem 处理器性能增强策略
powercfg -setdcvalueindex e9a42b02-d5df-448d-aa00-03f14749eb61 SUB_PROCESSOR PERFBOOSTPOL 50
powercfg -setacvalueindex e9a42b02-d5df-448d-aa00-03f14749eb61 SUB_PROCESSOR PERFBOOSTPOL 50
rem 处理器性能提升策略
powercfg -setdcvalueindex e9a42b02-d5df-448d-aa00-03f14749eb61 SUB_PROCESSOR PERFINCPOL 0
powercfg -setacvalueindex e9a42b02-d5df-448d-aa00-03f14749eb61 SUB_PROCESSOR PERFINCPOL 0
rem 处理器忙闲度
powercfg -setdcvalueindex e9a42b02-d5df-448d-aa00-03f14749eb61 SUB_PROCESSOR PERFDUTYCYCLING 1
powercfg -setacvalueindex e9a42b02-d5df-448d-aa00-03f14749eb61 SUB_PROCESSOR PERFDUTYCYCLING 1
rem 处理器闲置禁用
powercfg -setdcvalueindex e9a42b02-d5df-448d-aa00-03f14749eb61 SUB_PROCESSOR IDLEDISABLE 0
powercfg -setacvalueindex e9a42b02-d5df-448d-aa00-03f14749eb61 SUB_PROCESSOR IDLEDISABLE 0
rem 处理器闲置阈值调整
powercfg -setdcvalueindex e9a42b02-d5df-448d-aa00-03f14749eb61 SUB_PROCESSOR IDLESCALING 1
powercfg -setacvalueindex e9a42b02-d5df-448d-aa00-03f14749eb61 SUB_PROCESSOR IDLESCALING 1
rem 处理器性能核心放置减小策略
powercfg -setdcvalueindex e9a42b02-d5df-448d-aa00-03f14749eb61 SUB_PROCESSOR CPDECREASEPOL 2
powercfg -setacvalueindex e9a42b02-d5df-448d-aa00-03f14749eb61 SUB_PROCESSOR CPDECREASEPOL 2
rem 处理器性能自主模式
powercfg -setdcvalueindex e9a42b02-d5df-448d-aa00-03f14749eb61 SUB_PROCESSOR PERFAUTONOMOUS 1
powercfg -setacvalueindex e9a42b02-d5df-448d-aa00-03f14749eb61 SUB_PROCESSOR PERFAUTONOMOUS 1
rem 处理器空闲状态最大值
powercfg -setdcvalueindex e9a42b02-d5df-448d-aa00-03f14749eb61 SUB_PROCESSOR IDLESTATEMAX 0
powercfg -setacvalueindex e9a42b02-d5df-448d-aa00-03f14749eb61 SUB_PROCESSOR IDLESTATEMAX 0
rem 最小处理器状态
powercfg -setdcvalueindex e9a42b02-d5df-448d-aa00-03f14749eb61 SUB_PROCESSOR PROCTHROTTLEMIN 0
powercfg -setacvalueindex e9a42b02-d5df-448d-aa00-03f14749eb61 SUB_PROCESSOR PROCTHROTTLEMIN 0
rem 最大处理器状态
powercfg -setdcvalueindex e9a42b02-d5df-448d-aa00-03f14749eb61 SUB_PROCESSOR PROCTHROTTLEMAX 100
powercfg -setacvalueindex e9a42b02-d5df-448d-aa00-03f14749eb61 SUB_PROCESSOR PROCTHROTTLEMAX 100
rem 处理器性能提升时间
powercfg -setdcvalueindex e9a42b02-d5df-448d-aa00-03f14749eb61 SUB_PROCESSOR PERFINCTIME 1
powercfg -setacvalueindex e9a42b02-d5df-448d-aa00-03f14749eb61 SUB_PROCESSOR PERFINCTIME 1
rem 处理器性能下降时间
powercfg -setdcvalueindex e9a42b02-d5df-448d-aa00-03f14749eb61 SUB_PROCESSOR PERFDECTIME 1
powercfg -setacvalueindex e9a42b02-d5df-448d-aa00-03f14749eb61 SUB_PROCESSOR PERFDECTIME 1
rem 处理器性能提升模式
powercfg -setdcvalueindex e9a42b02-d5df-448d-aa00-03f14749eb61 SUB_PROCESSOR PERFBOOSTMODE 3
powercfg -setacvalueindex e9a42b02-d5df-448d-aa00-03f14749eb61 SUB_PROCESSOR PERFBOOSTMODE 3
rem 处理器性能核心放置增加策略
powercfg -setdcvalueindex e9a42b02-d5df-448d-aa00-03f14749eb61 SUB_PROCESSOR CPINCREASEPOL 2
powercfg -setacvalueindex e9a42b02-d5df-448d-aa00-03f14749eb61 SUB_PROCESSOR CPINCREASEPOL 2
rem 处理器性能核心放置最大核心数量
powercfg -setdcvalueindex e9a42b02-d5df-448d-aa00-03f14749eb61 SUB_PROCESSOR CPMAXCORES 50
powercfg -setacvalueindex e9a42b02-d5df-448d-aa00-03f14749eb61 SUB_PROCESSOR CPMAXCORES 50
rem 唤醒时不需要密码
powercfg -setdcvalueindex e9a42b02-d5df-448d-aa00-03f14749eb61 e9a42b02-d5df-448d-aa00-03f14749eb61 CONSOLELOCK 0
powercfg -setacvalueindex e9a42b02-d5df-448d-aa00-03f14749eb61 e9a42b02-d5df-448d-aa00-03f14749eb61 CONSOLELOCK 0
rem 从不关闭硬盘
powercfg -setdcvalueindex e9a42b02-d5df-448d-aa00-03f14749eb61 SUB_DISK DISKIDLE 0
powercfg -setacvalueindex e9a42b02-d5df-448d-aa00-03f14749eb61 SUB_DISK DISKIDLE 0
rem JavaScript 计时器频率最高性能
powercfg -setdcvalueindex e9a42b02-d5df-448d-aa00-03f14749eb61 02f815b5-a5cf-4c84-bf20-649d1f75d3d8 4c793e7d-a264-42e1-87d3-7a0d2f523ccd 1
powercfg -setacvalueindex e9a42b02-d5df-448d-aa00-03f14749eb61 02f815b5-a5cf-4c84-bf20-649d1f75d3d8 4c793e7d-a264-42e1-87d3-7a0d2f523ccd 1
rem 桌面允许放映幻灯片
powercfg -setdcvalueindex e9a42b02-d5df-448d-aa00-03f14749eb61 0d7dbae2-4294-402a-ba8e-26777e8488cd 309dce9b-bef4-4119-9921-a851fb12f0f4 0
powercfg -setacvalueindex e9a42b02-d5df-448d-aa00-03f14749eb61 0d7dbae2-4294-402a-ba8e-26777e8488cd 309dce9b-bef4-4119-9921-a851fb12f0f4 0
rem 无线适配器最高性能
powercfg -setdcvalueindex e9a42b02-d5df-448d-aa00-03f14749eb61 19cbb8fa-5279-450e-9fac-8a3d5fedd0c1 12bbebe6-58d6-4636-95bb-3217ef867c1a 0
powercfg -setacvalueindex e9a42b02-d5df-448d-aa00-03f14749eb61 19cbb8fa-5279-450e-9fac-8a3d5fedd0c1 12bbebe6-58d6-4636-95bb-3217ef867c1a 0
rem 从不自动进入睡眠
powercfg -setdcvalueindex e9a42b02-d5df-448d-aa00-03f14749eb61 SUB_SLEEP 29f6c1db-86da-48c5-9fdb-f2b67b1f44da 0
powercfg -setacvalueindex e9a42b02-d5df-448d-aa00-03f14749eb61 SUB_SLEEP 29f6c1db-86da-48c5-9fdb-f2b67b1f44da 0
rem 允许混合睡眠
powercfg -setdcvalueindex e9a42b02-d5df-448d-aa00-03f14749eb61 SUB_SLEEP 94ac6d29-73ce-41a6-809f-6363ba21b47e 1
powercfg -setacvalueindex e9a42b02-d5df-448d-aa00-03f14749eb61 SUB_SLEEP 94ac6d29-73ce-41a6-809f-6363ba21b47e 1
rem 从不自动进入休眠
powercfg -setdcvalueindex e9a42b02-d5df-448d-aa00-03f14749eb61 SUB_SLEEP 9d7815a6-7ee4-497e-8888-515a05f02364 0
powercfg -setacvalueindex e9a42b02-d5df-448d-aa00-03f14749eb61 SUB_SLEEP 9d7815a6-7ee4-497e-8888-515a05f02364 0
rem 允许使用唤醒定时器
powercfg -setdcvalueindex e9a42b02-d5df-448d-aa00-03f14749eb61 SUB_SLEEP bd3b718a-0680-4d9d-8ab2-e1d2b4ac806d 1
powercfg -setacvalueindex e9a42b02-d5df-448d-aa00-03f14749eb61 SUB_SLEEP bd3b718a-0680-4d9d-8ab2-e1d2b4ac806d 1
rem USB 选择性暂停设置
powercfg -setdcvalueindex e9a42b02-d5df-448d-aa00-03f14749eb61 2a737441-1930-4402-8d77-b2bebba308a3 48e6b7a6-50f5-4782-a5d4-53bb8f07e226 0
powercfg -setacvalueindex e9a42b02-d5df-448d-aa00-03f14749eb61 2a737441-1930-4402-8d77-b2bebba308a3 48e6b7a6-50f5-4782-a5d4-53bb8f07e226 0
rem 合上盖子,不采取任何操作
powercfg -setdcvalueindex e9a42b02-d5df-448d-aa00-03f14749eb61 SUB_BUTTONS 5ca83367-6e45-459f-a27b-476b1d01c936 0
powercfg -setacvalueindex e9a42b02-d5df-448d-aa00-03f14749eb61 SUB_BUTTONS 5ca83367-6e45-459f-a27b-476b1d01c936 0
rem 按下电源按钮为关机
powercfg -setdcvalueindex e9a42b02-d5df-448d-aa00-03f14749eb61 SUB_BUTTONS 7648efa3-dd9c-4e3e-b566-50f929386280 3
powercfg -setacvalueindex e9a42b02-d5df-448d-aa00-03f14749eb61 SUB_BUTTONS 7648efa3-dd9c-4e3e-b566-50f929386280 3
rem 按下睡眠按钮为睡眠
powercfg -setdcvalueindex e9a42b02-d5df-448d-aa00-03f14749eb61 SUB_BUTTONS 96996bc0-ad50-47ec-923b-6f41874dd9eb 1
powercfg -setacvalueindex e9a42b02-d5df-448d-aa00-03f14749eb61 SUB_BUTTONS 96996bc0-ad50-47ec-923b-6f41874dd9eb 1
rem (「开始」菜单电源按钮)
powercfg -setdcvalueindex e9a42b02-d5df-448d-aa00-03f14749eb61 SUB_BUTTONS a7066653-8d6c-40a8-910e-a1f54b84c7e5 2
rem (链接状态电源管理)
powercfg -setdcvalueindex e9a42b02-d5df-448d-aa00-03f14749eb61 SUB_PCIEXPRESS ee12f906-d277-404b-b6da-e5fa1a576df5 0
rem 系统散热方式为主动
powercfg -setdcvalueindex e9a42b02-d5df-448d-aa00-03f14749eb61 SUB_PROCESSOR 94d3a615-a899-4ac5-ae2b-e4d8f634367f 1
powercfg -setacvalueindex e9a42b02-d5df-448d-aa00-03f14749eb61 SUB_PROCESSOR 94d3a615-a899-4ac5-ae2b-e4d8f634367f 1

19.2   睡眠自动唤醒的异常排查

排查命令:

  • 查看最近一次唤醒的原因:powercfg /lastwake
  • 查看哪些设备被授权唤醒计算机:powercfg /devicequery wake_armed

一般唤醒的原因:

  1. 唤醒定时器:「电源选项」->「更改计划设置」->「更改高级电源设置」->「睡眠」->「允许使用唤醒定时器」(可以设置禁用)。
  2. 外部设备干扰:鼠标、键盘、网络适配器。「设备管理器」->选择对应设备「属性」->「电源管理」选项卡->取消选中「允许此设备唤醒计算机」复选框。
  3. 网络唤醒:网络上的活动可能会导致计算机从睡眠状态中唤醒。禁用网络适配器的「允许此设备唤醒计算机」复选框。
  4. 未知的第三方后台进程:比如迅雷等下载器、雷神等加速器或者全屏浏览器网页之类的。
  5. Windows系统更新和维护任务
  6. 其他硬件问题(通过命令详细排查)

19.3   睡眠和休眠

当windows系统中没有安装显卡驱动时(包括核显驱动,例如intel核显驱动),电源选项不会有睡眠按钮。

需要特别注意的是:即使在安装了独立显卡驱动的情况下,如果将显示器视频线接到主板核显接口上输出视频信号(CPU带核显)并且也没有安装核显驱动的话,电源选项不会有睡眠按钮。这个睡眠按钮是否可用,主要是看当前输出的视频信号是否有安装对应的驱动。

若使用powercfg /hibernate off命令关闭休眠功能,电源计划中的「选择电源按钮的功能」中「启动快速启动(推荐)」功能会禁用消失。

20   WSL

20.1   安装Docker Desktop需要启用WSL2功能

设置步骤(终端命令行执行):

  1. dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
  2. dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
  3. 重启系统
  4. wsl --set-default-version 2

21   封装系统

21.1   关于IT天空论坛工具的锁定主页的行为

锁定情况:EasyImageX2是优启通里面的系统安装器,在优启通里面是去广告的,但是换到另一个pe运行它又是带广告的;万能驱动用it天空的系统封装软件封装后可以去广告,移出来运行又会有广告。

实现原理:优启通启动的时候会在注册表生产一个当前机器的密钥字符串,然后EasyImageX2去解密判断,判断正确就免广告。同理万能驱动也是。注册表位置:HKEY_LOCAL_MACHINE\SOFTWARE\EasyDrv7\,但是仍然无法通过预先在系统中写入该注册表内容来去除推广包软件和主页绑定,因为是根据当前硬件信息生成一个key的。

21.2   万能驱动的精简

精简思路:softext文件夹内的几个安装包和驱动的压缩包是可删的,但所有e7e文件不可删(softext的e7e若删除,则会报错篡改;驱动压缩包对应的e7e若删除,则会导致卡100%的问题)。一般,驱动文件删除显卡驱动即可,oem和通用的。这种精简方式只适合在部署阶段中调用,无法在桌面环境下运行(会报错文件不完整或者软件被篡改)。如果想要精简并同时可以在桌面环境中运行的话,需要用老版的主程序替代。

21.3   DISM的系统打包(备份)

备份操作,会将驱动器的映像捕获到新的 .wim 文件中:

1
Dism /Capture-Image /ImageFile:D:\Windows10Pro-2024-04-13.wim /CaptureDir:C:\ /Name:Windows10Pro-2024-04-13 /compress:max

可以同时指定使用配置文件来打包wim镜像,比如捕获文件时排除休眠文件hiberfil.sys等,参见「DISM 配置列表文件」:

1
Dism /Capture-Image /ImageFile:D:\Windows10Pro-2024-04-13.wim /CaptureDir:C:\ /Name:Windows10Pro-2024-04-13 /ConfigFile:config_list.ini /compress:max

config_list.ini文件内容

1
2
3
4
5
6
7
8
9
10
11
12
13
14
[ExclusionList]
\$ntfs.log
\hiberfil.sys
\pagefile.sys
\swapfile.sys
\System Volume Information
\RECYCLER
\Windows\CSC

[CompressionExclusionList]
*.mp3
*.zip
*.cab
\WINDOWS\inf\*.pnf

21.4   DISM的系统恢复(应用)

关于使用系统自带命令工具来操作格式化硬盘,恢复镜像等操作,实际用法可参见「部署实验室示例脚本

恢复操作,此命令将对指定的分区应用 Windows 映像文件 (.wim):

一般推荐同时使用/Verify/NoRpFix参数,但在我实际应用中,wim镜像打包都OK,但是还原会有概率导致出问题(/NoRpFix还没测试过,也可能是因为中文字符的缘故,以往测试时/Name参数使用中文字符专业版,而非Pro)。

1
dism /apply-image /imagefile:%image_path% /index:1 /applydir:%win_drive_letter%:\

bcdboot重建系统引导(UEFI):

1
%win_drive_letter%:\Windows\System32\bcdboot %win_drive_letter%:\Windows /s %efi_drive_letter%: /f UEFI /l zh-cn

22   WinPE

22.1   WinPE的二次修改封装

22.1.1   ISO镜像

ISO镜像的二次修改和打包工具:AnyBurn,使用软件中的「编辑镜像文件」功能即可,这样就可以完美保留原镜像的引导启动数据。(不推荐用UltraISO,界面老旧且难用,主要是ISO的引导信息不好弄)

22.1.2   WIM镜像

wim镜像的二次修改,dism使用命令参见「DISM 映像管理命令行选项」:

  • 单版本:解压后就是系统本身,这种直接解压进行二次修改,然后dism++重新打包即可,记得勾选「可启动镜像」的选项。
  • 多版本(dism如何一直提示镜像已经被加载过,使用dism /cleanup-wim命令强制卸载所有镜像)
    1. 加载wim镜像到特定的路径空文件夹:dism /mount-wim /wimfile:G:\11pex64.wim /index:1 /mountdir:D:\GOF\mount
    2. 卸载镜像并保存更改到镜像中:dism /unmount-wim /mountdir:D:\GOF\mount /commit
    3. 导出wim以优化镜像(如果修改映像,DISM将存储额外的资源文件,比如wim文件内新增一个目录[DELETE],这会增大映像的总体大小。可以通过将映像导出到新的映像文件,实现优化该映像,即删除掉目录[DELETE]。)
      1
      2
      Dism /Export-Image /SourceImageFile:11pex64.wim /SourceIndex:1 /DestinationImageFile:11pex64.wim
      Dism /Export-Image /SourceImageFile:11pex64.wim /SourceIndex:2 /DestinationImageFile:11pex64.wim

22.2   关于加载PE后出现「\windows\system32\drivers\cdrom.sys」驱动加载错误的分析

问题现象:无论是更换pe版本或者更换U盘亦或是用其他分区方案制作PE,当选择U盘PE引导项加载时,都会出现这个「\windows\system32\drivers\cdrom.sys」报错提示,无法进入系统。

问题原因:硬件稳定性引起系统层面的问题,一般是内存多一些,CPU或者硬盘有小概率可能会导致这样。

解决方法:从硬件排障手段入手排查,尝试拔插内存或者单根内存测试下是否会这样。

22.3   PE内引导到特定设备

关于自动化分区和还原系统之后,若想自动引导到硬盘系统,而非USB的PE系统,一般有如下几个方案:

  • BIOS设置硬盘启动项:华硕主板实测无效,即使设置了BBS硬盘启动项(BBS还需要开启CSM选项保存重启),仍然是会引导至USB设备上。若设置关闭了USB的BBS,即使可以实现,但首次启动会报错提示找不到合适的启动设备。
  • PE通过BOOTICE工具的UEFI功能引导至BIOS界面或者修改UEFI OS指定为硬盘系统和引导位置(默认是指定到U盘的)
  • bcdedit修改引导启动项(BOOTICE好像也是通过bcdedit修改的)

22.4   获取特定硬盘分区的GUID

  • 命令行程序:mountvol
  • 分区工具:DiskGenius,选择特定分区查看GUID(非分区类型GUID)

23   应答文件 (unattend.xml)系统部署

使用应答文件自动完成安装和部署系统,在联网的情况下,因为存在联网服务器检测系统版本和更新状态,因此比拔掉网线断网的情况会会多占用2-3分钟左右的时间。(倘若插上网线联网状态一直卡在这个阶段的话,即可能由于连接服务器失败,需手动拔掉网线,让它检测判断并跳过该阶段)

24   参考文献

[1] 支持win7的最后一代CPU?支持win7系统推荐(支持8/9/10/11/12/13代cpu)[EB/OL]. http://w7.dnxtc.net/zixun/zuzhuangjiaocheng/2023-04-16/11866.html.
[2] 10代11代主板装win7开机蓝屏A5解决办法[EB/OL]. https://www.yweihu.com/post/242.html.
[3] 微软又给Windows11增加了限制?[EB/OL]. https://zhuanlan.zhihu.com/p/514063607.
[4] 在虚拟机上安装gho、esd(wim)系统镜像文件[EB/OL]. https://www.cnblogs.com/-mrl/p/9634227.html.
[5] Methods to install Windows from WinPE[EB/OL]. https://www.aioboot.com/en/install-windows/.
[6] 远程桌面连接出错「用户账户限制会阻止你登录...」[EB/OL]. https://blog.csdn.net/tian_ci/article/details/106790244.
[7] win10 系统怎么删除远程桌面连接记录[EB/OL]. https://blog.csdn.net/COCO56/article/details/102671007.
[8] 公用网络切换为专用网络的详细步骤[EB/OL]. https://blog.csdn.net/xuzishe/article/details/110818980.
[9] 如何使用 Windows 自带的 OpenSSH 服务端[EB/OL]. https://www.cnblogs.com/lfri/p/13423261.html.
[10]【Windows】允许空密码连接 Windows 的 OpenSSH Server[EB/OL]. https://www.jianshu.com/p/1ec72a019bd9.
[11] 解决 Windows 10 防火墙开启后无法 ping 通的问题[EB/OL]. https://blog.csdn.net/coco56/article/details/105800213.
[12] Microsoft账户无法登录怎么办?[EB/OL]. https://www.zhihu.com/question/449928889.
[13] 万能驱动 v7.23.925.3(2023.11.08 发布)[EB/OL]. https://www.puresys.net/1147.html.
[14] 技术 | Windows 10 更新新版微软商城(Microsoft Store) [EB/OL]. https://www.sizau.com/a/update-microsoft-store.html.
[15] WIN10安装NVIDIA面板两种方式[EB/OL]. https://zhuanlan.zhihu.com/p/144801155.
[16] easyImageX2和万能驱动有种奇特的现象[EB/OL]. http://wuyou.net/forum.php?mod=viewthread&tid=422066.
[17] 更新完显卡驱动,任务管理器里N卡的CUDA没了[EB/OL]. https://blog.csdn.net/weixin_45888599/article/details/119672852.
[18] Force DISM to unmount/delete a mounted Windows WIM[EB/OL]. https://superuser.com/questions/1091544/force-dism-to-unmount-delete-a-mounted-windows-wim.
[19] All In One 把该用到的都封到安装镜像中![EB/OL]. http://m.cfan.com.cn/pcarticle/128008.
[20] User Profile Service 服务登录失败 无法加载用户配置文件[EB/OL]. https://www.jianshu.com/p/5e913b9cf74d.
[21] Windows10切换用户显示User Profile Service或ProfSvc服务登录失败[EB/OL]. https://blog.csdn.net/Stand_Fast/article/details/119488113.
[22] 【经验之谈】“User Profile Service 服务未能登录,无法加载用户配置文件”实战历程[EB/OL]. https://blog.51cto.com/weixiao43/506699.
[23] Win10 电脑连接U盘/移动硬盘失败解决方法分享,该设备的驱动程序未被安装。(代码28)[EB/OL]. https://blog.csdn.net/XiaoMuiii/article/details/132660886.
[24] Booting is unsuccessful from "Windows Boot Manager" on the top of boot order in EFI setup. The booting is successful from Disk 0.[EB/OL]. https://www.veritas.com/support/en_US/article.100015603.
[25] 蓝屏代码0x00000109 错误分析.[EB/OL]. https://blog.csdn.net/qq_35206244/article/details/113805925.
[26] [求助] (已解决)请问怎么关闭"无法打开此ms-gamebar"弹窗,谢谢?.[EB/OL]. https://bbs.pcbeta.com/viewthread-1972471-1-1.html.
[27] Win11更新不能连接服务器的解决方法.[EB/OL]. https://www.jianshu.com/p/4c1edd1f08a8.
[28] Windows11显示“无法连接到更新服务。我们将稍后再试,你也可以立即进行检查。如果问题仍然存在,请确保你已连接到 Internet”.[EB/OL]. https://answers.microsoft.com/zh-hans/windows/forum/all/windows11%E6%98%BE%E7%A4%BA%E6%97%A0%E6%B3%95/ebbafb81-7002-4f54-a565-cdc4a89f3c31.
[29] Run Docker and VMware/VirtualBox at the same time in Windows[EB/OL]. https://medium.com/@eng.binasaker/run‑docker‑and‑vmware‑at‑the‑same‑time‑in‑windows‑dabf32babd71.
[30] Windows电脑睡眠中自动唤醒的原因和解决方法[EB/OL]. https://baiyunju.cc/11568.
[31] Reinstall and Re-register Microsoft Edge in Windows 10[EB/OL]. https://www.tenforums.com/tutorials/28655-reinstall-re-register-microsoft-edge-windows-10-a.html.
[32] New Windows driver blocks software from changing default web browser[EB/OL]. https://www.bleepingcomputer.com/news/microsoft/new-windows-driver-blocks-software-from-changing-default-web-browser/.
[33] BOOTICE -> UEFI -> UEFI boot entry configuration file ? (management of UEFI startup items)[EB/OL]. http://reboot.pro/index.php?showtopic=21508.
[34] [技术] 详细探讨一下12、13代酷睿处理器在Win11、W10中大小核调度[EB/OL]. https://bbs.pcbeta.com/viewthread-1966999-2-1.html.
[35] [技术] win10_电源方案设置为卓越性能节能高效设置[EB/OL]. https://bbs.pcbeta.com/viewthread-1994529-1-1.html.
[36] Windows 10 科学计算 CPU大小核调度策略试验与设置建议[EB/OL]. https://zhuanlan.zhihu.com/p/660344272.

1   Qt语法

Qt信号与槽使用方法最完整总结

2   Qt学习资料

3   Qt程序发布的流程

  1. Qt Creator开发程序
  2. 选择release编译后,在源码文件夹之外会生成构建的文件夹,带有-Release尾缀,在这个目录下拷贝程序的exe二进制文件到一个新建的文件夹中。
  3. 运行windeployqt工具打包动态链接文件:windeployqt program_name.exe。确保提前添加环境变量PATH:C:\Qt\qt6release\bin,否则找不到windeployqt程序。P.S. 使用vs cl终端运行windeployqt会同时拷贝vc_redist.x64.exe安装包(Microsoft Visual C++ 2015-2022 Redistributable (x64) - 14.36.32532,可以解决目标系统缺少dll动态链接库的报错),使用普通的终端运行windeployqt则不会拷贝这个文件(Warning: Cannot find Visual Studio installation directory, VCINSTALLDIR is not set.),但实际上可以手动拷贝dll动态链接库文件到程序根目录,可免去用户再次运行安装运行库。
  4. NSIS打包生成安装包:创建快捷方式、创建卸载程序、界面美化(模仿网易云音乐安装包)、判断是否正在运行、判断并安装VC运行库。

3.1   单文件封包流程

除了静态编译可以单文件的打包,动态链接编译开发也可以实现,这个需要使用三方封包工具了,一般都是使用Enigma Virtual Box进行单文件的打包。

单文件打包流程:

  1. 新建文件夹,拷贝qt程序exe,运行windeployqt.exe打包动态链接文件,拷贝额外的MS VC++ DLL文件
  2. 打开Enigma Virtual Box,选择打包的程序
  3. 选择好打包程序后会自动生成一个打包后的程序名
  4. 在增加文件选项里面选择 增加文件夹[递归] ,把前面创建存放文件的文件夹包含进去
  5. 在文件选项 选择压缩文件
  6. 执行封包

缺点:使用Enigma Virtual Box打包的单文件,有可能会被杀毒软件识别为病毒,比如Windows Defender。

4   Qt Creator的总结

4.1   下载

断网再打开Qt Creator的安装包,等跳过检测联网帐号的界面后就可以启用网络继续安装。

4.2   修改模板文件以便新建工程时默认支持C++20

使用程序完成批量修改:modify_qt_creator_template_files_to_support_c++20.bat

将以下文件中的set(CMAKE_CXX_STANDARD 17)修改为set(CMAKE_CXX_STANDARD 20)

  • qtcreator-14.0.2\share\qtcreator\templates\wizards\projects\consoleapp\CMakeLists.txt
  • qtcreator-14.0.2\share\qtcreator\templates\wizards\projects\cpplibrary\CMakeLists.txt
  • qtcreator-14.0.2\share\qtcreator\templates\wizards\projects\plaincpp\CMakeLists.txt
  • qtcreator-14.0.2\share\qtcreator\templates\wizards\projects\qtquickapplication_compat\CMakeLists.txt
  • qtcreator-14.0.2\share\qtcreator\templates\wizards\projects\qtwidgetsapplication\CMakeLists.txt

将以下文件中的CONFIG += c++17修改为CONFIG += c++20

  • qtcreator-14.0.2\share\qtcreator\templates\wizards\projects\consoleapp\file.pro
  • qtcreator-14.0.2\share\qtcreator\templates\wizards\projects\cpplibrary\project.pro
  • qtcreator-14.0.2\share\qtcreator\templates\wizards\projects\plaincpp\file.pro
  • qtcreator-14.0.2\share\qtcreator\templates\wizards\projects\qtwidgetsapplication\project.pro

5   Qt国际化多语言的总结

QT官方多语言编程wiki参考:How to create a multi language application

  1. 创建工程文件时,勾选国际化选项。
  2. 打开CMakeLists.txt文件,修改${TS_FILES}对应的文件和手动生成需要的ts文件,找到if(${QT_VERSION_MAJOR} GREATER_EQUAL 6)语句,在该if语句内添加如下内容,其中untitled为项目名称。如果还需要创建对应资源文件的话,就创建languages.qrc并有qt资源编辑器打开编辑。
    1
    2
    3
    4
    5
    6
    7
    qt_create_translation(QM_FILES ${CMAKE_SOURCE_DIR} ${TS_FILES})
    qt_add_executable(untitled
    MANUAL_FINALIZATION
    ${PROJECT_SOURCES}
    ${TS_FILES}
    ${QM_FILES}
    )
  3. 编辑ui文件,编辑程序界面文本。
  4. 构建工程,ts文件会自动生成对应的文本(无需使用QT Creator的工具->外部->Linguist->Update/Release Translations(lupate),这个工具运行会报错)

5.1   创建工程提示找不到合适的套件

问题:安装Qt Creator之后,在创建工程提示No suitable kits found.

解决:点击管理,手动设置构建套件kit的qt版本,这是通过选择qmake.exe或者qmake6.exe的路径确认。(不用重装,网上的教程都是重装或者安装在线版本包,但直接重装是无效)。

5.2   旧项目的套件配置文件中的CL编译器路径不正确

原因:更新MSVC CL后,老版本编译器就被删除了,旧项目的套件配置文件中的CL编译器路径仍然是老版本的路径,导致路径错误无法识别最新版本的编译器。

解决方法:删除项目父路径中生成的构建配置文件夹,例如build-untitled-x64-Release,然后重新构建新的配置文件夹。

6   Qt源码编译

6.1   下载

  • CMake
  • Ninja
  • MSVC CL编译器(Visual Studio 2022 生成工具)
  • Qt源码,以下是我个人使用到的模块(按编译顺序列出)
    • qtbase(基础库)
    • qtshadertools(编译qtdeclarative所需的依赖库)
    • qtdeclarative(qt quick和QML)
    • qttools(CMakeLists文件中指明要Qt Linguist包,因此即使在qt creator中没用上「工具」->「外部」->「Linguist」也要编译)
    • qtsvg(FluentUI库所需)
    • qt5compat(FluentUI库所需)
    • qttranslation(如果不编译这个库,运行windeployqt会出现警告:Warning: Translations will not be available due to the following error. Cannot open C:/Qt/qt6release/translations/catalogs.json。但这个错误实际不影响程序的翻译状态,可以不编译)

6.2   环境配置和编译步骤

环境变量:确保系统PATH环境变量含有CMake和Ninja路径。

注意不能使用ninja直接构建源码,会报错:build.ninja not found。构建是使用CMake。

编译步骤:

  1. 将源码解压到分区的根目录下,例如:G:\qtbase-everywhere-src-6.8.0
  2. 在源码文件夹外新建一个文件夹,如qtbasebuild,拷贝该编译脚本进文件夹,打开cmd窗口,执行该脚本(不建议直接双击运行编译脚本,因为脚本编译出错或者执行完毕都会关闭窗口,这样无法得知编译详情)。
  3. 编译完成后添加环境变量PATH配置:C:\Qt\qt6release\bin

6.3   单模块逐个编译的BAT脚本

附加编译子模块的方式:运行Qt安装路径下的/bin/qt-configure-module.bat + 附件模块源码解压路径。

一般普通开发编译release版本即可,debug版本是是编译用来开发调试qt源码的。

6.3.1   编译release版本

6.3.1.1   编译qtbase(release)

1
2
3
4
@chcp 65001>nul
@echo off
CALL "C:\Program Files (x86)\Microsoft Visual Studio\2022\BuildTools\VC\Auxiliary\Build\vcvarsall.bat" x64
..\qtbase-everywhere-src-6.8.0\configure.bat -prefix C:\Qt\qt6release -c++std c++20 -release -optimize-size -shared && cmake --build . --parallel && cmake --install .

6.3.1.2   附加编译其他子模块(release)

1
2
3
4
@chcp 65001>nul
@echo off
CALL "C:\Program Files (x86)\Microsoft Visual Studio\2022\BuildTools\VC\Auxiliary\Build\vcvarsall.bat" x64
C:\Qt\qt6release\bin\qt-configure-module.bat G:\qtshadertools-everywhere-src-6.8.0 && cmake --build . --parallel && cmake --install .

6.3.2   编译debug版本

6.3.2.1   编译qtbase(debug)

1
2
3
4
@chcp 65001>nul
@echo off
CALL "C:\Program Files (x86)\Microsoft Visual Studio\2022\BuildTools\VC\Auxiliary\Build\vcvarsall.bat" x64
..\qtbase-everywhere-src-6.8.0\configure.bat -prefix C:\Qt\qt6debug -c++std c++20 -debug -shared && cmake --build . --parallel && cmake --install .

6.3.2.2   附加编译其他子模块(debug)

1
2
3
4
@chcp 65001>nul
@echo off
CALL "C:\Program Files (x86)\Microsoft Visual Studio\2022\BuildTools\VC\Auxiliary\Build\vcvarsall.bat" x64
C:\Qt\qt6debug\bin\qt-configure-module.bat ..\qtshadertools-everywhere-src-6.8.0 && cmake --build . --parallel && cmake --install .
阅读全文 »

R.I.P