使用 Java 更改文件关联

Changing file associations using Java

我了解到您可以使用 assoc .pmdtb="X:\PassswordManager.bat" 等命令更改 Windows 文件关联,但我仍然遇到一些问题。

  1. 当我在命令行中运行命令时,什么都没有改变。具有此扩展名的文件仍可使用记事本打开。

  2. 当我尝试 运行 Java 中的命令时,我被拒绝访问。

如何在 Java 中编辑 Windows 内部文件关联?如果我宁愿直接编辑注册表,那么多个 类 目录中的哪一个?

我的Java代码:

Runtime.getRuntime().exec("cmd.exe /c assoc .pmdtb=\"X:\PasswordManager.bat\"");
// --> Access denied.

提前致谢。

assocftype开始的Windows显然无法更改文件关联 8. 注册表中还有一个哈希码,它是用秘密算法生成的.如果我更改文件关联,但哈希不匹配,则默认打开此文件扩展名不会更改。哈希的 Windows 算法已被逆向工程。基于此,您可以将算法转换为Java并直接更改注册表。

可以在此处找到带有 QT 的 C++ 代码:https://pastebin.com/yVhWeQ3X

到目前为止,最简单的方法是使用多种 FTA 实用程序之一来为您解析安全散列。

例如https://danysys.com/set-file-type-association-default-application-command-line-windows-10-userchoice-hash-internal-method/

然后通过来自您的 java 应用程序的 cmd 行调用使用它

您可能需要测试这些选项(阅读上面链接页面上的评论并查看 issues on github),但它可以像

一样简单
SFTA.exe --reg "X:\PassswordManager.bat" "pmdtb"