Handy Tips for Solving Windows & Software Issues

Handy Tips for Solving Windows & Software Issues

Astrid Stark Lv. ∞

我们在使用Windows系统和各种软件的过程中,经常会遇到一些操作失误、性能优化难题以及功能异常等问题。这篇文章汇总了一系列实用的技巧,帮助快速解决常见问题,同时提升系统与软件的使用体验。

GitHub 仓库信息查看

使用 GitHub 的 API 服务,在浏览器地址栏输入:https://api.github.com/repos/username/reponame 就可以获得指定作者指定仓库的详细信息。

比如,输入 https://api.github.com/repos/AstridStark25963/AstridStark25963.github.io 就可以得到我的仓库的 JSON 格式的信息:

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
{
"id": 907337136,
"node_id": "R_kgDONhTdsA",
"name": "AstridStark25963.github.io",
"full_name": "AstridStark25963/AstridStark25963.github.io",
"private": false,
"owner": {
"login": "AstridStark25963",
"id": 116073056,
"node_id": "U_kgDOBusiYA",
"avatar_url": "https://avatars.githubusercontent.com/u/116073056?v=4",
"gravatar_id": "",
"url": "https://api.github.com/users/AstridStark25963",
"html_url": "https://github.com/AstridStark25963",
"followers_url": "https://api.github.com/users/AstridStark25963/followers",
"following_url": "https://api.github.com/users/AstridStark25963/following{/other_user}",
"gists_url": "https://api.github.com/users/AstridStark25963/gists{/gist_id}",
"starred_url": "https://api.github.com/users/AstridStark25963/starred{/owner}{/repo}",
"subscriptions_url": "https://api.github.com/users/AstridStark25963/subscriptions",
"organizations_url": "https://api.github.com/users/AstridStark25963/orgs",
"repos_url": "https://api.github.com/users/AstridStark25963/repos",
"events_url": "https://api.github.com/users/AstridStark25963/events{/privacy}",
"received_events_url": "https://api.github.com/users/AstridStark25963/received_events",
"type": "User",
"user_view_type": "public",
"site_admin": false
},
"html_url": "https://github.com/AstridStark25963/AstridStark25963.github.io",
"description": "A personal website powered by Hexo with the Redefine theme. Explore articles, tutorials, and projects about programming, technology, and more.",
"fork": false,
"url": "https://api.github.com/repos/AstridStark25963/AstridStark25963.github.io",
"forks_url": "https://api.github.com/repos/AstridStark25963/AstridStark25963.github.io/forks",
"keys_url": "https://api.github.com/repos/AstridStark25963/AstridStark25963.github.io/keys{/key_id}",
"collaborators_url": "https://api.github.com/repos/AstridStark25963/AstridStark25963.github.io/collaborators{/collaborator}",
"teams_url": "https://api.github.com/repos/AstridStark25963/AstridStark25963.github.io/teams",
"hooks_url": "https://api.github.com/repos/AstridStark25963/AstridStark25963.github.io/hooks",
"issue_events_url": "https://api.github.com/repos/AstridStark25963/AstridStark25963.github.io/issues/events{/number}",
"events_url": "https://api.github.com/repos/AstridStark25963/AstridStark25963.github.io/events",
"assignees_url": "https://api.github.com/repos/AstridStark25963/AstridStark25963.github.io/assignees{/user}",
"branches_url": "https://api.github.com/repos/AstridStark25963/AstridStark25963.github.io/branches{/branch}",
"tags_url": "https://api.github.com/repos/AstridStark25963/AstridStark25963.github.io/tags",
"blobs_url": "https://api.github.com/repos/AstridStark25963/AstridStark25963.github.io/git/blobs{/sha}",
"git_tags_url": "https://api.github.com/repos/AstridStark25963/AstridStark25963.github.io/git/tags{/sha}",
"git_refs_url": "https://api.github.com/repos/AstridStark25963/AstridStark25963.github.io/git/refs{/sha}",
"trees_url": "https://api.github.com/repos/AstridStark25963/AstridStark25963.github.io/git/trees{/sha}",
"statuses_url": "https://api.github.com/repos/AstridStark25963/AstridStark25963.github.io/statuses/{sha}",
"languages_url": "https://api.github.com/repos/AstridStark25963/AstridStark25963.github.io/languages",
"stargazers_url": "https://api.github.com/repos/AstridStark25963/AstridStark25963.github.io/stargazers",
"contributors_url": "https://api.github.com/repos/AstridStark25963/AstridStark25963.github.io/contributors",
"subscribers_url": "https://api.github.com/repos/AstridStark25963/AstridStark25963.github.io/subscribers",
"subscription_url": "https://api.github.com/repos/AstridStark25963/AstridStark25963.github.io/subscription",
"commits_url": "https://api.github.com/repos/AstridStark25963/AstridStark25963.github.io/commits{/sha}",
"git_commits_url": "https://api.github.com/repos/AstridStark25963/AstridStark25963.github.io/git/commits{/sha}",
"comments_url": "https://api.github.com/repos/AstridStark25963/AstridStark25963.github.io/comments{/number}",
"issue_comment_url": "https://api.github.com/repos/AstridStark25963/AstridStark25963.github.io/issues/comments{/number}",
"contents_url": "https://api.github.com/repos/AstridStark25963/AstridStark25963.github.io/contents/{+path}",
"compare_url": "https://api.github.com/repos/AstridStark25963/AstridStark25963.github.io/compare/{base}...{head}",
"merges_url": "https://api.github.com/repos/AstridStark25963/AstridStark25963.github.io/merges",
"archive_url": "https://api.github.com/repos/AstridStark25963/AstridStark25963.github.io/{archive_format}{/ref}",
"downloads_url": "https://api.github.com/repos/AstridStark25963/AstridStark25963.github.io/downloads",
"issues_url": "https://api.github.com/repos/AstridStark25963/AstridStark25963.github.io/issues{/number}",
"pulls_url": "https://api.github.com/repos/AstridStark25963/AstridStark25963.github.io/pulls{/number}",
"milestones_url": "https://api.github.com/repos/AstridStark25963/AstridStark25963.github.io/milestones{/number}",
"notifications_url": "https://api.github.com/repos/AstridStark25963/AstridStark25963.github.io/notifications{?since,all,participating}",
"labels_url": "https://api.github.com/repos/AstridStark25963/AstridStark25963.github.io/labels{/name}",
"releases_url": "https://api.github.com/repos/AstridStark25963/AstridStark25963.github.io/releases{/id}",
"deployments_url": "https://api.github.com/repos/AstridStark25963/AstridStark25963.github.io/deployments",
"created_at": "2024-12-23T11:03:42Z",
"updated_at": "2025-01-31T03:44:50Z",
"pushed_at": "2025-01-31T03:44:46Z",
"git_url": "git://github.com/AstridStark25963/AstridStark25963.github.io.git",
"ssh_url": "git@github.com:AstridStark25963/AstridStark25963.github.io.git",
"clone_url": "https://github.com/AstridStark25963/AstridStark25963.github.io.git",
"svn_url": "https://github.com/AstridStark25963/AstridStark25963.github.io",
"homepage": "https://1lya.com/",
"size": 80797,
"stargazers_count": 0,
"watchers_count": 0,
"language": "HTML",
"has_issues": true,
"has_projects": true,
"has_downloads": true,
"has_wiki": true,
"has_pages": true,
"has_discussions": false,
"forks_count": 0,
"mirror_url": null,
"archived": false,
"disabled": false,
"open_issues_count": 0,
"license": null,
"allow_forking": true,
"is_template": false,
"web_commit_signoff_required": false,
"topics": [
"hexo",
"hexo-theme-redefine",
"personal-website"
],
"visibility": "public",
"forks": 0,
"open_issues": 0,
"watchers": 0,
"default_branch": "main",
"temp_clone_token": null,
"network_count": 0,
"subscribers_count": 1
}

npm 下载 Electron 报错

在创建一个 Electron 项目的开始,可能会遇到下载安装 Electron 依赖出现问题的情况,无法安装,甚至在进行修改 npm 镜像为淘宝源、添加 npm config 网络代理配置的操作后,仍然无法下载和安装。

在终端输入以下命令修改 npm 配置文件:

1
npm config edit

打开 .npmrc 文件后,在文件中修改镜像源为官方源:

1
registry=https://registry.npmmirror.com/

在文件中添加如下内容:

1
2
electron_builder_binaries_mirror=https://npmmirror.com/mirrors/electron-builder-binaries/
electron_mirror=https://cdn.npmmirror.com/binaries/electron/

然后关闭该窗口,重启命令行,删除 node_modules 文件夹,并执行以下命令清除 npm 缓存:

1
npm cache clean --force

再重新安装依赖:

重新安装 Electron

Google 服务提取网站图标

Google 提供了一项免费的服务,可用于快速提取任意网站的图标。这一服务可以通过指定目标网站的域名,返回其 favicon 图标。URL 格式如下:

1
https://www.google.com/s2/favicons?sz=64&domain=example.com

sz 参数:获取指定大小的网站图标

domain 参数:指定需要获取的网站域名

例如,在浏览器地址栏输入 https://www.google.com/s2/favicons?sz=64&domain=google.com 就可以获得 Google 的网站图标:

Google 网站图标

此操作也可以用在前端或后端代码中,用来动态获取指定网站的图标。

管理员权限失效

在删除文件的时候,发现就算打开终端并调用管理员权限仍无法删除:

终端管理员无法删除文件

使用 PowerShell 并调用管理员权限也无法删除:

Powershell 管理员无法删除文件

修改文件属性报错:

文件应用属性时出错

对注册表进行修改:将目录HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\SystemEnableLUA的值改为0,重启后即可对文件进行操作。

EnableLUA

原理是禁用了 Windows 的用户帐户控制功能(UAC)。UAC 是一种安全机制,旨在防止未经授权的更改被应用到系统上。

导致这个问题的原因可能是在某次在清理注册表时,误删除了一个 CLSID(类标识符)相关注册表项。如果在清理注册表时误删了这些关键项,可能会导致:

  1. Windows 无法正确解析权限提升请求,即便以管理员身份运行,仍然无法操作受限文件。
  2. UAC 机制异常,导致权限判断逻辑出错,即使是管理员账户也被当作普通用户处理。
  3. explorer.exe、CMD、PowerShell 权限控制失效,导致某些操作权限丢失。

以上解决办法仅为权宜之计,电脑再次重启时仍会恢复 UAC 控制。如果出现这种情况,建议重新安装系统来避免更大的问题出现。

Thunderbird 绑定邮箱服务

由于各种原因,我们平常总会使用不止一个邮箱账户来接收邮件,但如果每次查看邮件都要访问各邮件系统对应的网站或 APP 未免有些麻烦,因此我们可以将所有邮箱添加到 Thunderbird(Mozilla 公司开发的邮件管理系统)来实现邮件的统一查看。

对于 Gmail / Outlook / Yahoo Mail 等邮件系统,直接输入相应邮件地址和密码即可添加:

添加电子邮件地址

对于 QQ 邮箱等,如果经过密码尝试无法添加或获取登录信息,则说明邮箱需要进行多次验证。

在网页端登录 QQ 邮箱,打开设置,在账号部分找到如下内容:

QQ 邮箱获取授权码

选择打开服务,扫码,并根据步骤指南继续获得授权码。

一个授权码只能被查看和使用一次,因此请妥善保管。

获得授权码后,在 Thunderbird 添加账户时的密码部分填写授权码即可。

对于校园邮箱,则需要访问相应网址获取邮件系统的收发服务器。

以哈工大电子邮件系统为例:

哈工大电子邮件系统收发服务器及对应端口

只需在 Thunderbird 中添加账户时手动选择服务器设置并输入学校网站提供的收发服务器地址及端口即可。

服务器设置

家庭版 Windows 系统添加组策略管理器

新建文本文档,输入以下内容后另存为 .bat 文件,然后使用管理员身份运行:

1
2
3
4
5
6
@echo off
pushd "%~dp0"
dir /b %systemroot%\Windows\servicing\Packages\Microsoft-Windows-GroupPolicy-ClientExtensions-Package~3*.mum >gp.txt
dir /b %systemroot%\servicing\Packages\Microsoft-Windows-GroupPolicy-ClientTools-Package~3*.mum >>gp.txt
for /f %%i in ('findstr /i . gp.txt 2^>nul') do dism /online /norestart /add-package:"%systemroot%\servicing\Packages\%%i"
pause

运行结果如图:

部署组策略管理器

等待下载完成后,Win + R 输入 gpedit.msc 测试是否成功:

已添加本地组策略管理器

Word 在试图打开文件时遇到错误

有时,在下载来自网络的 .docx 文档后,由于 Word 的安全设置,无法打开文件,此时需要在 Word 的设置中取消对此项的审查。

在 Word 中进入选项,点击左侧的“信任中心”,然后选择右侧的“信任中心设置”:

Word 选项

进入信任中心后,点击左侧的“受保护视图选项卡”,并取消勾选第一个选项“为来自 Internet 的文件启用受保护的视图”:

信任中心

点击“确定”后退出,即可打开来自网络的文件。

环境变量 Path 无法分行显示

在配置环境变量时,有时会遇到 Path 无法分行显示的问题:

Path 无法分行显示

一般来讲,导致问题的原因是在 Path 开头使用了以相对路径表示的环境变量(如图中的 %JAVA_HOME%)。

将这一条导致问题的环境变量移动到后边,或者将下一条环境变量移动到开头即可解决问题。

Path 恢复分行显示

删除文件默认打开方式

有时候,一个特殊类型的文件误使用错误的打开方式打开,它的图标就会变成所使用的软件的图标,并且鼠标左键双击也是通过这个错误的方式打开。这时,我们就需要将文件的默认打开方式清空,变回未知。

在 Windows 系统中,文件的默认打开方式通过多个注册表项来管理,特别是以下三个关键注册表路径:

  • HKEY_CLASSES_ROOT\<扩展名>\OpenWithList
    该路径下存储的是系统范围内为特定文件扩展名所设置的可用程序列表。它列出了所有能够打开该类型文件的程序,并决定了文件右键点击时的“打开方式”菜单中的程序列表。这并不决定文件的默认打开方式,而是用于提供可选程序的列表。
  • HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\<扩展名>\OpenWithList
    记录当前用户在该文件类型上的历史打开记录。也就是说,它记录了当前用户最常使用的程序来打开该类型文件。当你右键一个文件并选择“打开方式”时,Windows 会显示最近使用的程序。
    同样,它并不会直接决定文件的默认打开方式,而只是影响右键菜单中的“最近使用的程序”列表。
  • HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\<扩展名>\UserChoice
    这是最关键的注册表项,它决定了当前用户对该文件类型的默认打开方式。它存储了一个 ProgId 和一个哈希值,用于指定默认的程序打开该文件。
    如果这个键存在,它将覆盖其他设置,强制文件通过指定的程序打开。

若想清除文件的默认打开方式,我们主要需要删除 UserChoice 键。清除后,Windows 会恢复至系统默认的打开方式,或者提示你重新选择应用程序。在注册表编辑器中找到相应注册表路径删除即可。

在操作前,建议备份注册表,以防万一。

也可以使用 PowerShell 一键删除这些注册表项,恢复文件的默认打开方式。以下是用于清除 .pdf 文件默认关联的 PowerShell 脚本:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 删除特定文件类型的注册表项(例如 .pdf)
$extension = ".pdf"

# 删除 `UserChoice` 键(关键项)
Remove-Item -Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\$extension\UserChoice" -Force

# 删除当前用户下的 `OpenWithList` 键(移除最近使用的程序列表)
Remove-Item -Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\$extension\OpenWithList" -Force

# 删除系统级别的 `OpenWithList` 键(系统级别的打开方式列表)
Remove-Item -Path "HKCR:\.$extension\OpenWithList" -Force

# 重启资源管理器
Stop-Process -Name explorer -Force
Start-Process explorer

将以上代码复制粘贴到记事本中,另存为 .ps1 文件并执行即可。

最后,重启文件资源管理器,发现指定扩展名的文件的打开方式已经变回了未知。

如果仍不起作用,可以先备份注册表,再直接删除 HKEY_CLASSES_ROOT\<扩展名>HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\<扩展名> 两个文件夹,然后重启文件资源管理器。

开机 NumLock 键默认关闭

有的电脑开机时,每次都要按一下 NumLock 键才能通过小键盘输入数字,可以设定为开机默认打开 NumLock 键。

Win + R 输入 regedit 打开注册表编辑器,在路径 计算机\HKEY_USERS\.DEFAULT\Control Panel\Keyboard 中,修改 InitialKeyboardIndicators 项的值为 2 即可。

InitialKeyboardIndicators = 0 表示关闭全部指示仪

InitialKeyboardIndicators = 1 表示开启 Caps Lock(大写锁定)

InitialKeyboardIndicators = 2 表示开启 Num Lock(数字锁定)

InitialKeyboardIndicators = 4 表示开启 Scroll Lock(滚动锁定)

InitialKeyboardIndicators 项的默认值为 2147483648

设置完成后重启电脑。

如果上述操作不生效,则需启动时进入 BIOS 进行设置。

Markdown 嵌入视频链接

.md 文档中可以使用 HTML 语法嵌入视频。

本地视频需要使用 <video> 内嵌套 <source> 标签嵌入视频地址:

1
2
3
<video controls width="100%">
<source src="C:\Users\lenovo\Videos\test-video.mp4" type="video/mp4">
</video>

效果图:

本地视频展示效果

Bilibili 视频需要使用 <iframe> 标签嵌入视频地址:

1
<iframe src="https://player.bilibili.com/player.html?bvid=BV1diUDYcEur" width="1280px" height="720px" scrolling="no" border="0" frameborder="no" framespacing="0" allowfullscreen="true"></iframe>

效果图:

B站视频展示效果

YouTube 视频同样需要使用 <iframe> 标签嵌入视频地址,但其中的 src 参数需要修改为 https://www.youtube.com/embed/xxx 的形式:

1
2
<iframe src="https://www.youtube.com/embed/YZjd5iM2v9o" width="1280" height="720" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen>
</iframe>

效果图:

油管视频展示效果

WinGet 批量更新软件

我们在使用电脑时经常会安装很多软件,但如果想要让软件都保持最新版本,又不想使用第三方应用商店管理,就可以使用系统自带的 WinGet 工具进行批量更新。

输入以下命令获取有新版本的软件列表:

1
winget upgrade

软件更新列表

输入以下命令以更新指定软件:

1
winget upgrade <software.id.01> <software.id.02>

更新软件

如果想批量更新所有软件,输入以下命令:

1
winget upgrade --all

WinGet 的核心数据来源于 Microsoft 维护的官方软件仓库。这个仓库包含了大量常见软件的元数据,当用户运行 winget upgrade 时,WinGet 会从该仓库中获取最新的软件版本信息,并与本地已安装的软件进行对比,从而判断是否需要更新。

需要注意的是,使用 WinGet 工具更新并不区分软件的正式版和 Beta 版本等渠道。如果想指定渠道更新软件,需要通过在命令后添加--channel 参数来选择对应的频道。

Windows 开发者选项功能

在 Windows 开发者选项中,有很多正式版系统没有实装但非常有用的功能。

开发者选项

启用“结束任务”功能允许用户在任务栏右键点击图标结束任务,相当于在任务管理器结束相应任务。

结束任务

启用 sudo 允许用户像在 Linux 系统中一样直接以管理员权限运行指定命令。在没有 sudo 命令时,Windows 系统只能通过以管理员身份运行 CMD 或 Powershell,或者在 CMD 中使用 runas /user:Administrator "command" 命令来调用管理员权限。

在“配置 sudo 如何运行应用程序”设置中,Windows 提供了三种方式:在新窗口中、禁用输入和内联。如果选择“在新窗口中”设置,运行 sudo 命令时会打开一个新的窗口来执行该命令;选择“禁用输入”设置会禁止用户输入,无法进行交互;选择“内联”设置,则会在当前窗口中以管理员权限运行命令,并允许交互。“内联”设置最符合 Linux 系统中的用户使用习惯。

sudo 命令

sudo 命令执行示例

右键新建文件类型配置

我们在写代码或文档时,经常需要新建一个空白文件,但打开软件后再新建文件却又显得很麻烦,于是可以通过修改注册表的方式实现在桌面新建空白文件。

以 Markdown 文件为例:

首先安装 Typora 或 Visual Studio Code。

Win + R 输入 regedit 打开注册表编辑器,在 计算机\HKEY_CLASSES_ROOT 下找到 .md 项。

注册表编辑器

如果没有找到 .md 项,一定先安装 Typora 或 Visual Studio Code 并创建一个 Markdown 文件再进行接下来的操作。

.md 项下新建 Content TypePerceivedType 两个字符串值。

注册表 .md 项

(Default) 赋默认值 Typora.mdVScode.md

(Default) 默认值

Content Type 赋值 text/markdown

Content Type 默认值

PerceivedType 赋值 text

PerceivedType 默认值

.md 下新建项 ShellNew,并在 ShellNew 下新建字符串值 NullFile

新建空文件

回到桌面,就能新建 Markdown 文件了。

桌面新建项

测试最佳 DNS 服务器

Namebench 是谷歌开发的一个软件,该软件可以测试 DNS 解析速度。Namebench的工作原理是根据位置和浏览历史来寻找最快的DNS服务器。访问 Namebench Download 页面可以选择软件的合适版本并下载。

Namebench 下载页面

下载后,安装软件,软件一般被解压到 C:\Users\<用户名>\AppData\Local\Temp 文件夹下。

进入软件界面,进行测试设置,然后点击 Start Benchmark 进行测试。

软件界面

软件界面各选项介绍:

Nameservers: 默认测试的 DNS 服务器地址,工具将分析哪一个提供最佳的性能。如果有需要,可以自行指定 DNS 服务器地址。

Include Global DNS Providers: 选中此选项后,Namebench 会包含一些著名的全球 DNS 提供商(如 Google Public DNS、OpenDNS、UltraDNS)进行测试。这些 DNS 服务器无论在速度、安全或可靠性方面,相对比较稳定,建议勾选。

Include Best Available Regional DNS Services: 选中此选项后,Namebench 会根据你的地理位置测试本地区域的 DNS 服务,以找到最佳的区域性 DNS 提供商。ISP 的 DNS 服务器很可能属于这个类别,在某些情况下,它可能是最快的,建议勾选。

Include censorship checks: 可以选择安全级别更高的 DNS 服务器进行测试。

Upload and share your anonymized results: 上传并分享自己的测试结果。

Your Location: 默认选择 None 即可。

Health Check Performance: 默认使用 Fast 即可,如果网络不稳定可以选择 Slow。

Query Data Source: 这是 DNS 查询的数据来源,选项包括:

  • Google Chrome: 指定浏览器历史记录进行查询,如果选择 Google Chrome,Namebench 将查询使用 Google Chrome 访问过的域名的随机样本,并针对这些域名进行测试。
  • Top 2,000 Websites ranked by Alexa: 如果不想让 Namebench 访问浏览器历史记录,或者如果总是匿名浏览,可以选择查询 Alexa 的前 2000 个网站。
  • Cache Latency Test: 缓存延迟测试,支持不同的命中 / 未命中比例。

Number of Queries: 这个选项可以设置基准测试中执行的 DNS 查询次数,查询次数越多,测试的全面性就越高。但是查询次数太高会导致测试时间过长。

完成测试后,工具会自动在浏览器中展示结果,包括根据你选择的标准计算出的最快 DNS 服务器。

测试结果

左侧面板显示最佳DNS服务器比目前使用的主DNS服务器快多少。然后,在右边的窗口中,将会显示适用于所在网络的最快的DNS。

Subtitle Edit 合成双语字幕

有的时候,我们只有一个单独的英文字幕和一个对应的中文字幕,却没有合并的中英双语字幕。如果想要合并制作中英双语字幕,可以使用 Subtitle Edit。

为了美观,先分别打开中文和英文字幕并取消每一句字幕的断行。

断行

Ctrl + A 全选,然后点击“取消断行”。

取消断行效果

字幕断行注意事项:

  1. Subtitle Edit 中的断行无法通过 Ctrl + H 替换,只能通过“取消断行”取消。
    无法查找到断行符
  2. 取消断行会自动将换行替换为空格(为了英文考虑),所以中文字幕在取消断行后会多出一个空格,需要手动删除。

选择“工具 - 合并字幕”,然后选择两个字幕文件:

合并字幕

选择“工具 - 排序方式 - 开始时间”,按时间戳排序字幕。

按照开始时间排序

然后点击“工具 - 合并时间码相同的行”,根据两个字幕文件的时间差选择合适的最大毫秒差并点击确定。

合并时间码相同的行

“制作对话框”功能会在中英双语字幕前分别加一个“-”符号,更加美观。

合并成功后保存文件,在电影中添加字幕测试效果。

Subtitle Edit 内测试效果

播放器内测试效果

当然,如果遇到更复杂的情况,比如中英文的字幕分句不同,这样在合并的时候就会出现错误,需要手动调整。

调用 SYSTEM 权限更改文件

在卸载 ZeroTier 之后,发现 C:\Program Files (x86) 下仍然有残留文件。

手动删除文件,提示需要提供管理员权限;提供权限后,提示需要 SYSTEM 提供的权限才能删除:

需要 SYSTEM 提供的权限才能对此文件进行更改

查看文件属性,尝试修改文件权限,发现全都是灰色无法修改:

无法修改文件权限

经过查询,了解到在 Administrator 上还有更高的 SYSTEM 权限。

PsExec - Sysinternals 下载 PsExec 工具,然后在 PsTools 文件夹下输入以下命令运行 PsExec:

1
.\psexec -i 1 -s cmd.exe

-i 1 是指在交互模式下启动(“1” 是指桌面编号,通常是默认桌面),-s 是指以 SYSTEM 权限运行命令。

运行 PsExec 工具

这条命令会打开一个以 SYSTEM 权限运行的 CMD,可以用 whoami 命令验证当前会话身份:

成功调用 SYSTEM 权限

这样就能对锁定 SYSTEM 权限的文件进行更改了。

如果想要想 sudo 调用管理员权限一样快速调用 SYSTEM 权限,可以创建 systemdo.batsystemdo.ps1,并把这两个文件放在一个有系统环境变量的路径下(或为存储这两个文件的路径单独添加环境变量),这样直接在 CMD 或者 Powershell 中输入 systemdo 就能调用 SYSTEM 权限了。

systemdo.bat

1
2
@echo off
sudo psexec -s cmd.exe

systemdo.ps1

1
sudo psexec -s powershell.exe

以上功能的实现要求先安装并启用内联式的 Sudo for Windows。