0

所以我今天有一个任务,自动化在 LibreOffice 中选择 Java 包的过程(当你在 GPO 中安装新的 Java 版本时,你必须在 LibreOffice 中通过 Tools->Settings->LibreOffice-> 手动选择新版本的 Java先进的)。这个想法非常简单,我需要更改的所有内容就是这个带有 PowerShell 脚本的简单 xml 文件:

<?xml version="1.0" encoding="UTF-8"?>
<!--This is a generated file. Do not alter this file!-->
<java xmlns="http://openoffice.org/2004/java/framework/1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<enabled xsi:nil="true"/>
<userClassPath xsi:nil="false">//server/public/base/mysql-connector-java-5.1.25/mysql-connector-java-5.1.25-bin.jar</userClassPath>
<vmParameters xsi:nil="true"/>
<jreLocations xsi:nil="true"/>
<javaInfo xsi:nil="false" vendorUpdate="2013-05-02" autoSelect="false">
<vendor>Oracle Corporation</vendor>
<location>file:///C:/Program%20Files%20(x86)/Java/jre1.8.0_91</location>
<version>1.8.0_91</version>
<features>0</features>
<requirements>0</requirements>
<vendorData>660069006C0065003A002F00[...]76006D002E0064006C006C00</vendorData> //250+ hex characters
</javaInfo>
</java>

一切都很顺利,直到我注意到这个 vendorData 元素。它对每个包都是独一无二的,包含 250 多个十六进制字符。当我尝试在其中手动更改某些内容时,LibreOffice 中 Java 包的选择会自动取消选中,如果我再次手动选择包,十六进制字符串将自动生成。我认为这个字符串包含校验和。

有谁知道,这个字符串是如何生成的?是否有任何 LibreOffice 文档,可以在其中找到类似的内容?

XML 文件通常位于%appdata%\Roaming\LibreOffice\4\user\config\javasettings_Windows_x86.xml

十六进制字符串的长度各不相同,但其中的某些部分似乎是恒定的。

4

1 回答 1

1

嗯,答案很简单。这个“奇怪”的十六进制字符串只是从内容到文件位置的路径 + 最后它在同一代码中添加字符串“/bin/client/jvm.dll”,其中十六进制代码中的 FF 只是 ASCII 字符的数量,然后00 表示下一个字母。

例如:

6100620063

所以我们得到了 3 个字符,十进制的 61 是 97,而在 ASCII 中是“a”。

整个“6100620063”表示“abc”。

有了这些知识,我们只需要简单的函数来将“/bin/client/jvm.dll”内容转录和字符串到十六进制代码。

于 2016-08-16T12:29:29.327 回答