分类 软件技术 下的文章

MinGW编译Windows程序添加文件属性中的版本信息

Windows应用程序或DLL文件,通过Windows资源管理器查看文件属性,其中可以看到文件说明、产品名称与版本、版权等信息,Microsoft官方称之为VERSIONINFO(版本信息资源)。本文讲述在使用MinGW编译Windows程序时如何添加此版本信息资源。

Windows应用程序开发中,版本信息定义于VersionInfo.rc文件中。因此我们首先需要一个文件模板:
以下两个分别来源于微软官方和网络:

微软:

#define VER_FILEVERSION             3,10,349,0
#define VER_FILEVERSION_STR         "3.10.349.0\0"

#define VER_PRODUCTVERSION          3,10,0,0
#define VER_PRODUCTVERSION_STR      "3.10\0"

#ifndef DEBUG
#define VER_DEBUG                   0
#else
#define VER_DEBUG                   VS_FF_DEBUG
#endif

VS_VERSION_INFO VERSIONINFO
FILEVERSION     VER_FILEVERSION
PRODUCTVERSION  VER_PRODUCTVERSION
FILEFLAGSMASK   VS_FFI_FILEFLAGSMASK
FILEFLAGS       (VER_PRIVATEBUILD|VER_PRERELEASE|VER_DEBUG)
FILEOS          VOS__WINDOWS32
FILETYPE        VFT_DLL
FILESUBTYPE     VFT2_UNKNOWN
BEGIN
    BLOCK "StringFileInfo"
    BEGIN
        BLOCK "040904E4"
        BEGIN
            VALUE "CompanyName",      VER_COMPANYNAME_STR
            VALUE "FileDescription",  VER_FILEDESCRIPTION_STR
            VALUE "FileVersion",      VER_FILEVERSION_STR
            VALUE "InternalName",     VER_INTERNALNAME_STR
            VALUE "LegalCopyright",   VER_LEGALCOPYRIGHT_STR
            VALUE "LegalTrademarks1", VER_LEGALTRADEMARKS1_STR
            VALUE "LegalTrademarks2", VER_LEGALTRADEMARKS2_STR
            VALUE "OriginalFilename", VER_ORIGINALFILENAME_STR
            VALUE "ProductName",      VER_PRODUCTNAME_STR
            VALUE "ProductVersion",   VER_PRODUCTVERSION_STR
        END
    END

    BLOCK "VarFileInfo"
    BEGIN
        /* The following line should only be modified for localized versions.     */
        /* It consists of any number of WORD,WORD pairs, with each pair           */
        /* describing a language,codepage combination supported by the file.      */
        /*                                                                        */
        /* For example, a file might have values "0x409,1252" indicating that it  */
        /* supports English language (0x409) in the Windows ANSI codepage (1252). */

        VALUE "Translation", 0x409, 1252

    END
END

第二个模板:

1 VERSIONINFO
 FILEVERSION ${PROJECT_VERSION_MAJOR}, ${PROJECT_VERSION_MINOR}, ${PROJECT_VERSION_PATCH}
 PRODUCTVERSION ${PROJECT_VERSION_MAJOR}, ${PROJECT_VERSION_MINOR}, ${PROJECT_VERSION_PATCH}
 FILEFLAGSMASK 0x17L
#ifdef _DEBUG
 FILEFLAGS 0x1L
#else
 FILEFLAGS 0x0L
#endif
 FILEOS 0x4L
 FILETYPE 0x0L
 FILESUBTYPE 0x0L
BEGIN
    BLOCK "StringFileInfo"
    BEGIN
        BLOCK "040904b0"
        BEGIN
            VALUE "FileDescription", "MyLibrary Binary"
            VALUE "FileVersion", "${PROJECT_VERSION_MAJOR}, ${PROJECT_VERSION_MINOR}, ${PROJECT_VERSION_PATCH}"
            VALUE "InternalName", "MyLibrary"
            VALUE "LegalCopyright", "Copyright (C) 2019"
            VALUE "OriginalFilename", ""
            VALUE "ProductName", "MyLibrary"
            VALUE "ProductVersion", "${PROJECT_VERSION_MAJOR}, ${PROJECT_VERSION_MINOR}, ${PROJECT_VERSION_PATCH}"
        END
    END
    BLOCK "VarFileInfo"
    BEGIN
        VALUE "Translation", 0x409, 1200
    END
END

按照以上两个模板生成的exe文件,语言会显示英语,如果需要修改为中文,则需要对以下两个地方进行修改:

BEGIN
    BLOCK "StringFileInfo"
    BEGIN
        BLOCK "080404b0"
    . . .

    BLOCK "VarFileInfo"
    BEGIN
        VALUE "Translation", 0x804, 1200

可见前面的0804是语言代码,后面是字符集标识,Translation部分的1200,其十六进制就是上面StringFileInfo04b0,上下两处的值要对应,否则编译出的exe文件,版本信息会显示错误)

VersionInfo.rc文件如果包含中文,则需要使用GB2312编码保存。若使用UTF-8,则中文会乱码。

按照模板修改得到资源文件后,需要首先编译资源文件为.o文件。MinGW存在一个专门用于编译资源文件的windres程序,使用以下命令将其编译为VersionInfo.o

windres VersionInfo.rc -O coff -o VersionInfo.o

然后通过在GCC编译程序命令中添加VersionInfo文件进行目标程序编译:

gcc -o MyAPP.exe MyAPP.c VersionInfo.o

参考资料:

VERSIONINFO 资源 - Win32 apps | Microsoft Learn
https://learn.microsoft.com/zh-cn/windows/win32/menurc/versioninfo-resource

VarFileInfo BLOCK 语句 - Win32 apps | Microsoft Learn
https://learn.microsoft.com/zh-cn/windows/win32/menurc/varfileinfo-block

StringFileInfo BLOCK 语句 - Win32 apps | Microsoft Learn
https://learn.microsoft.com/zh-cn/windows/win32/menurc/stringfileinfo-block

CMake为DLL添加版本信息 - 知乎
https://zhuanlan.zhihu.com/p/97512450

H3C WA4320H-SI-FIT USB 连接串口按键无效踩坑记

前言:

今天与新华三的技术支持一起研究给H3C的一个墙面AP刷固件,AP型号是WA4320H-SI-FIT,瘦AP。我们要做的是通过串口命令刷固件,这个机型的串口是通过Micro USB接口连接到电脑识别的。通过数据线连接电脑后,电脑顺利的出现了一个COM口,使用MobaXterm顺利连接串口,也看到了串口打印的日志。但在提示 Press ENTER to get started 时,按ENTER键却没有任何反应,我们尝试重启后在前面的 Press Ctrl-B to ...时按Ctrl+B,也没有任何反应。新华三技术支持表示遇到过数据线不良导致此问题的,但我这换了几根线后依然如此,可以排除线的问题。

故障原因:

在一切陷入僵局后,向公司的大佬求助。大佬插到他的笔记本上,Ctrl+B一按下去,启动过程就被终止了。本来我想的是机器原始固件有限制,不识别按键输入,大佬上肯定也补星。大佬成功后我当即傻眼,随后脑子里放电影似的回忆大佬操作过程和我哪里不一样,发觉在大佬笔记本的设备管理器里,串口设备名称貌似和我不一样,这说明串口驱动不一样! 如此说来,会不会是驱动不兼容导致的呢?事实证明,确实如此!

故障处理:

于是,我求大佬让我再看了一眼他的设备管理器,记下了大佬的串口名称是 XR21V1410后马不停蹄跑回自己电脑旁 ,看我的电脑则是什么Microsoft USB Serial Port。至于XR21V1410 是什么,我是从未听说过,于是我去搜索了一番,发现这是MaxLinear公司的一款USB转串口芯片。

立刻从官方产品页下载了最新的Windows驱动程序,然后解压。在串口上右击,更新驱动,定位到刚解压的驱动,进行更新,完事儿就能正常使用了!

其他原因:

此处列出其他可能的原因:

  1. 数据线不良导致传输数据不稳定。

    更换更好的数据线。

  2. 串口配置信息错误。

    波特率9600,数据位8,停止位1,无奇偶校验与流控。某些Shell默认打开流控,需要取消掉。

B560M Pro4 主板安装ESXi与黑群晖踩坑笔记

为了改善家中文件存储的安全性,降低功耗,笔者打算替换掉家中运行黑群晖的那台十几年前的工控机。新的机器使用专业的6盘位NAS机箱,配置采用B560M Pro4主板搭配Intel CORE i5 11500 CPU、16G DDR4 3000 * 2 。有望提升性能、降低功耗、扩充功能、提高数据安全,并且降低房间噪音。

读懂并实践本文,你可能需要预先在技能树中点亮以下技能:
1:基本的Windows系统与Linux Shell操作;
2:基本的网络知识;
3:域名、证书申请相关;

ESXi踩坑

ESXi 6.7 更换证书实现正常HTTPS访问

ESXi装完后默认就是HTTPS访问,但证书确实自签名的。浏览器会报不安全,使用体验很差。于是我们要更换证书,在这之前,要拥有自己的域名,并且配好外网访问或将域名解析到内网地址。
外网访问技术方面,内网穿透或是端口转发;证书的获取,很多云服务商提供了免费的额度,大概阿里云就有吧,申请后会得到一个证书和一个私钥;以上此处不做赘述。

证书两个文件,xxx.crt改为rui.crt,xxx.key改为rui.key 。

启动ESXi后,网页登录,在 主机 页面点击 操作->服务->启用安全Shell(SSH) ,打开SSH访问。

连接SSH后进入 /etc/vmware/ssl 目录,把原有的证书和私钥文件改名或直接删除,然后将刚才改名的文件上传。

重启ESXi,或使用以下命令重启相关服务后新的证书便被应用了。

/etc/init.d/hostd restart
/etc/init.d/vpxa restart

ESXi 6.7 修改配置文件强制设置SATA直通

装完ESXi6.7,发现主板自带的SATA控制器无法像别人那样可以直接设置直通,对应的控制器是灰色的。这时,我们就需要修改配置文件了。

首先,需要确认VT-D已经打开了,这个在BIOS中设置,每款主板设置不一样,相信能玩ESXi的朋友,这个应该都会打开,不知道怎么设置可以使用搜索引擎搜索。

启动ESXi后,网页登录,在 主机 页面点击 操作->服务->启用安全Shell(SSH) ,打开SSH访问。

点击主机->管理->硬件->PCI设备,找到描述内容中含有 SATA、AHCI 字样的设备,记录其 设备 ID供应商 ID注意,若要直通SATA控制器,务必保证安装ESXi的存储器不在直通的SATA控制器下,否则直通后ESXi将无法启动!

使用类似Putty、MobaXterm、xShell等终端工具连接ESXi,账号使用root,密码与网页登录相同。

然后使用 vi 修改ESXi的配置文件 /etc/vmware/passthru.map ,在文件末尾加入AHCI控制器的硬件ID后保存重启,如下所示。vi的使用此处不再赘述。

# Intel Corporation SATA
8086   43d2    d3d0    default

重启后即可在主机->管理->硬件->PCI设备页面下看到SATA设备已经不是灰色了,后面该怎么做直通就不罗嗦了。

ESXi 6.7 直通核显

ESXi在开机时会获取核显的控制权限,用于显示自检信息与DCUI界面,其他并不能作为硬件性能提供给虚拟机用,这样让人感觉有点浪费了核显。我们可以考虑将它直通给某个虚拟机使用。

启动ESXi后,网页登录,在 主机 页面点击 操作->服务->启用安全Shell(SSH) ,打开SSH访问。

点击主机->管理->硬件->PCI设备,找到描述内容中包含Intel字样的条目,自行判断哪个是显卡。选中后点击 切换直通 将其切换为直通,按提示重新引导ESXi。

编辑需要核显的虚拟机,点击添加其他设备->PCI 设备,在下拉菜单中选中需要添加的核显,点击 预留所有内存 ,然后保存。

在ESXi Shell下执行以下命令,让ESXi启动时不去获取显卡控制权,然后重启ESXi。

esxcli system settings kernel set -s vga -v FALSE

Tips:如上设置后,DCUI界面便不能直接访问了。需要访问DCUI界面可在Shell中使用dcui命令进入DCUI,退出按Ctrl+C。

Tips:不再使用核显直通时记得改回去,上面的命令中 FALSE 换成 TRUE 执行一下即可。

ESXi 6.7 直通网口老是提示“已启用/需要重新引导”

为了局域网传输速度,斥资购买了2.5G PCIE网卡,安装后正常识别。切换直通,重新引导后依然提示“已启用/需要重新引导”。

通过搜索发现:

这个是ESXi 对PCIE 设备的 ACScheck 带来的问题。在主机>管理>系统>高级设置里面,找到VMkernel.Boot.disableACSCheck,关掉就好了。


黑群晖踩坑

群晖网口改桥接电脑插群晖上网

因为我财力有限,路由器没有2.5G网口,目前只有我的电脑和群晖有2.5G网口。于是我需要将群晖的两个2.5G网口桥接,然后电脑通过网线直插群晖上网。这样,我的电脑访问群晖的网络速率就是2.5G了。经过搜索找到了办法。

打开群晖的Open vSwitch交换机

登录群晖管理页面,打开 控制面板->网络->网络界面 ,点击 管理->Open vSwitch设置 ,勾选 启用Open vSwitch 然后点击确定。若之前已经启用了群晖的虚拟机功能,你会发现Open vSwitch已是启用状态且无法关闭,则此步骤忽略。

打开群晖的SSH并连接Shell

登录群晖管理页面,打开 控制面板->终端机和 SNMP->终端机,勾选 启用SSH,点击 应用 保存设置。

使用类似Putty、MobaXterm、xShell等终端工具连接群晖。用户名和密码与网页登录相同,要使用有管理员权限的账号。

通过命令配置Open vSwitch

登陆后执行 sudo -i 提升到root权限。通过 ifconfig 命令可以看到ovs_eth0ovs_eth1两个网桥,通过详细的信息判断哪个网桥是连接路由器的,哪个网桥暂未使用给电脑。保留连接路由器的网桥,删除暂未使用的网桥,然后将释放的接口绑定到第一个网桥。

这里,我的 ovs_eth0ovs_eth1 分别对应 eth0eth1 ,大多数双网口群晖应该都是如此。于是我要删除ovs_eth1,将释放的eth1接口绑定到ovs_eth0。命令如下:

ovs-vsctl del-br ovs_eth1
ovs-vsctl add-port ovs_eth0 eth1

执行后将电脑连接通过网线连接到群晖的第二个网口,若配置正确,此时电脑应该可以正常获取IP,正常上网了。若网络不正常,可重启群晖,Open vSwitch的配置将还原。

通过任务计划让群晖开机时自动配置Open vSwitch

若上一步的网络配置可以正常工作,则将这两句命令添加到任务计划开机执行,这样就不用每次重启群晖都手动再配一遍了。

登录群晖管理页面,打开 控制面板->任务计划,点击 新增->触发的任务->用户定义的脚本 。在弹出的添加窗口中,常规选项卡下,任务名称自己编,用户选择 root 、事件选择开机;任务设置选项卡下,在运行命令下的文本框中填入有效的命令,然后点击确定保存即可。

Tips:使用此方法后可能出现自动获取IP异常的问题,建议在设置前先为网络1分配静态IP地址试用,笔者遇到此问题后将IP设为了静态,会关注一段时间。

Edge浏览器菜单透明效果异常导致无法看清的处理方案

前言:

笔者最近新换的电脑出厂预装Windows11,这个系统稳定性真不行,会出很多莫名其妙的问题。于是笔者装了个Windows11 的虚拟机,在虚拟机中安装Windows10还是有点小问题的,这里不展开。完活后发现的第一个问题就是Edge浏览器菜单透明样式异常,完全看不清选项。如下图所示:

Edge

处理思路:

  1. 这个问题一看就感觉与显示渲染有关,很有可能是虚拟机图形显示驱动兼容性问题。首先考虑换个黑主题碰碰运气,试了一下果然不行。

  2. 然后就打开搜索引擎开摆。最开始用关键词 Edge 菜单透明 搜索未果,考虑 Edge 和 Chrome 都采用的 Chromium 内核,会不会有Chrome用户遇到这个问题呢?

  3. 然后换关键词 Chrome 菜单透明 ,找到有用的信息了。

    有知乎用户于19年发文表示Chrome遇到此问题,前辈在文中表示他几乎把能试的都试了,都无效。最后突然想到显示相关office相关软件有个设置叫 硬件加速 前辈找了一下果然Chrome也有 硬件加速 ,然后关掉就好了。

    文末还有不愿透露ID的大佬评论,通过实验项目改一下图形后端渲染模式也可以解决。

详细操作:

于是我们有了两个办法二选一:

  1. 修改ANGLE graphics backend

    该项设置属于实验型设置,在Chrome中是在 chrome://flags 位置,那么在Edge中就应该是在地址栏中输入 edge://flags 回车打开实验项目设置。

    搜索 Choose ANGLE graphics backend 设置项,笔者测试只有 D3D11on12 选项是能恢复正常工作的。如果你不是虚拟机遇到此问题,可以试试换其他选项。如果所有选项都不行,那只好试试下面的办法了。

  2. 关闭硬件加速

    打开Edge浏览器的设置,如果看不清不好选择,可直接在地址栏输入 edge://settings 回车进入。然后在左侧选择 系统和性能 (有些环境中是:系统),然后在右侧的设置条目中找到使用硬件加速,将其关闭

    其实VMware虚拟机的话,还有一个办法:那就是在虚拟机设置中取消 加速3D图形 ,该设置在虚拟机设置的 显示器 部分。这个设置关闭虚拟机才能改哦!(非常糟糕的方案)

总结:为不影响性能,尽量用第一个办法解决。

参考:

Chrome部分框架窗口都变半透明了——WireWolf

GoldenDict搭配Python 程序使用腾讯云机器翻译

前言:

笔者之前曾经写过一篇博文,介绍了自己使用翻译工具的经历。最后还安利了一波 GoldenDict ,同时安利了某位大佬的项目,调用 Python 程序通过 Google 翻译为 GoldenDict 添加整句翻译功能。最近笔者在新买的电脑上配置这套翻译工具时,发现这个Python程序只支持通过Google.com翻译了。而在中国大陆是无法直连Google.com的,于是我希望有一个替代方案。经过一番简单的对比,发现腾讯云提供了易于上手、免费额度足的翻译API,腾讯翻译君也是用的这个API。于是我便参考大佬的项目,通过腾讯云API接口,自己写了一个Python程序。

因为笔者学习Python的总时长不超过5小时,才疏学浅,还请大佬们不要喷我写的辣鸡代码,代码会放到GitHub上,大佬如果看不下去,欢迎添砖加瓦。整个配置分为申请翻译接口和部署Python程序两大步。

仓库链接

申请翻译接口:

目前腾讯机器翻译每月提供5百万字符的免费文本翻译额度,一般的非翻译工作者,这个量应该足够了。只需要开通机器翻译免费账户,到达月免费限额会自动中断服务,不会扣费。当然,你也可以升级付费账号,超出免费额度后付费使用。

  1. 首先我们需要打开 腾讯云 官网并登录,没有可先点击页面右上角注册账号,登录后需要在右上角的菜单中进行个人实名认证。
  2. 注册后点击机器翻译 TMT页面上的立即使用按钮,会跳转到机器翻译的服务控制台。
  3. 在控制台勾选 我已阅读··· ,然后点击免费试用,按提示免费开通机器翻译服务。为避免超出免费额度后被收费,首次开通建议选择试用版,若以后发现免费版不够用,可以随时改付费版。
  4. 开通后,鼠标放在网页右上角头像上,在弹出的菜单中点击访问管理,然后在左侧菜单选择访问密钥 --> API 密钥管理,进入之后会有一个弹窗提示。
  5. 弹窗的内容是告诉你,在目前界面创建的密钥可以调用账号里的所有腾讯云资源,为保险起见,建议创建一个子账号,然后只给这个子账号分配需要的服务对应权限,最后使用子账号创建密钥,这样更安全。
  6. 此时有两种方法:
    • 一种是忽略提示,点击 继续使用 ,然后点击 新建密钥 按钮,表格里就会添加新的密钥,能看到Secretld和SecretKey。这样操作简单,但一旦泄露风险较大。
    • 另一种操作繁琐一些,但更安全。点击 切换使用子账号密钥 ,会跳转到新建用户页面。点击自定义创建,选择 可访问资源并接收消息 ,然后点击 下一步 。新的页面中设置用户信息:填写用户名,备注可填写 机器翻译接口-GoldenDict访问方式:只勾选编程访问。其他不必填写,完成后点击下一步。新的页面中搜索“ 机器翻译 ”,勾选QcloudTMTFullAccess(机器翻译(TMT)全读写访问权限) 即可,然后点击下一步。最后的页面用于审阅之前几步填写的信息,确认无误后点击 完成 即可。此时就会看到这个子账户的SecretId和SecretKey
  7. 完成上面操作后,保持页面,等待下面部署Python程序阶段使用SecretIdSecretKey

部署Python程序:

注意,笔者Python初学者,技术很菜,目前发现程序有个Bug,如果输入的Text包含“®™”这类符号,会报错退出。

安装Python3.3.6以上,到官网下载,装的时候注意勾上pip和PATH。

安装腾讯云SDK:

pip install --upgrade tencentcloud-sdk-python

中国大陆地区的用户可以使用国内镜像源提高下载速度,例如:

pip install -i https://mirrors.tencent.com/pypi/simple/ --upgrade tencentcloud-sdk-python

GitHub下载TencentTrans.pyfavicon.ico两个文件,随手丢在合适的地方。目录不要太深,注意不要有空格。

文本编辑器打开 TencentTrans.py ,修改以下两行中的内容为上一大步中申请的ID和KEY。

SecretId = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
SecretKey = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"

GoldenDict 中点击 编辑 --> 词书 ,在 来源 选项卡中选择 程序 选项卡。点击 添加 按钮,类型选择 纯文本 ,名称填写 腾讯翻译君 ,命令行填写 python 文件路径\TencentTran.py %GDWORD% ,图标填写 文件路径\favicon.ico

以上的路径要使用 绝对路径,类似于这样格式 python C:\GoldenDict\XXX\Python.py , C:\GoldenDict\XXX\favicon.ico

填写完成后将前面的已启用打勾,点击确定按钮完成配置。这样就可以使用啦!

参考资料:

NTFS文件系统出错导致文件操作提示:文件访问被拒绝

前言

意外断电导致硬盘文件系统错误,在运行完文件系统检查后,部分文件夹的图标上出现了锁头的图标,尝试打开文件、复制到其他地方,Windows系统提示文件访问被拒绝,您需要权限才能执行此操作。从而导致工作无法进行下去。
此问题常出现在硬盘意外断电、硬盘更换电脑使用等情况。笔者曾多次遇到此问题,但具体情况略有区别。本文旨在整理相关处理方案,方法不一定都能奏效,仅供参考。

注意:即便使用以下方法恢复了对文件的访问权限,也建议您尽快备份磁盘或分区的文件,将磁盘或分区重新格式化再使用。

单个文件的处理

如果只是单个的文件出现了问题,可以尝试手动修改文件的权限信息。

  1. 右击文件,点击 属性 打开属性窗口,点击 安全 选项卡,在点击 高级
  2. 在高级安全设置的窗口中,检查 权限所有者 的配置,如果权限中没有当前登录的用户名或Everyone组,尝试向其添加 Everyone 组,并为其设置允许完全控制的权限(如果有用户或组,但权限配置不正确也如此修改)。
  3. 如果设置权限失败,则检查 所有者 选项卡。如果所有者不是当前登录用户名,尝试改为当前登录用户。如果仍然失败,可能是用户权限不足,若所有者是administrator,可尝试登录administrator账号处理。

命令批量处理

当有大量文件需要处理时可参考上文尝试直接对文件夹或磁盘的安全属性进行设置,但有时可能会遇到失败。那便可以尝试通过命令方式取得文件权限。

  1. 使用管理员权限打开命令提示符。在开始菜单搜索中搜索cmd命令提示符,然后在其上右击,选择 以管理员身份运行 (Windows10在开始菜单的右键里)。

  2. 使用以下命令切换到欲操作的分区或目录:

    cd /d E:\xxx
  3. 使用以下命令获取文件所有者权限:

    takeown /R /F *
  4. 使用以下命令重置文件权限:

    icacls * /T /Q /C /RESET

    到此,您应该重新得到了操作文件的权限。

添加右键菜单处理

通过导入一些注册表信息,添加一个名为 管理员取得所有权 的右键菜单。用来处理此类问题。方法是将以下代码保存为纯文本文件,并重命名为 xxx.reg 。最后双击文件按系统提示导入注册表即可添加菜单。

Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\*\shell\runas]
@="管理员取得所有权"
"NoWorkingDirectory"=""
[HKEY_CLASSES_ROOT\*\shell\runas\command]
@="cmd.exe /c takeown /f \"%1\" & icacls \"%1\" /grant administrators:F"
"IsolatedCommand"="cmd.exe /c takeown /f \"%1\" & icacls \"%1\" /grant administrators:F"
[HKEY_CLASSES_ROOT\exefile\shell\runas2]
@="管理员取得所有权"
"NoWorkingDirectory"=""
[HKEY_CLASSES_ROOT\exefile\shell\runas2\command]
@="cmd.exe /c takeown /f \"%1\" & icacls \"%1\" /grant administrators:F"
"IsolatedCommand"="cmd.exe /c takeown /f \"%1\" & icacls \"%1\" /grant administrators:F"
[HKEY_CLASSES_ROOT\Directory\shell\runas]
@="管理员取得所有权"
"NoWorkingDirectory"=""
[HKEY_CLASSES_ROOT\Directory\shell\runas\command]
@="cmd.exe /c takeown /f \"%1\" /r /d y & icacls \"%1\" /grant administrators:F /t"
"IsolatedCommand"="cmd.exe /c takeown /f \"%1\" /r /d y & icacls \"%1\" /grant administrators:F /t"

添加右键菜单后,只需在需要处理的文件或文件夹 右击,选择 管理员取得所有权 即可。

使用Linux系统处理

大多情况下,将磁盘挂到Linux系统下复制文件可以忽略文件系统错误导致的权限问题。这需要有一台运行Linux系统的计算机。考虑操作方便,建议选用桌面系统,比如Ubuntu desktop。插入磁盘后应该能自动发现并挂载,图形界面的操作无需多言。如果您选用无桌面的Linux系统,相信您的技术也能自行完成操作。