Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Windows 10 exe file detail info has messy code text #325

Closed
1 of 3 tasks
ClayGminx opened this issue May 11, 2023 · 30 comments
Closed
1 of 3 tasks

Windows 10 exe file detail info has messy code text #325

ClayGminx opened this issue May 11, 2023 · 30 comments
Labels
bug Something isn't working duplicate This issue or pull request already exists feedback Waiting for feedback fixed Issue fixed and release pending merged Changes merged into devel branch

Comments

@ClayGminx
Copy link

I'm submitting a…

  • bug report
  • feature request
  • other

As the following picture display, the detail info in exe file has messy code text.

Note that my true description is "一个用于自动制作敬拜PPT的小工具".

Additional issue, my expect language is "简体中文", but it display "英语(美国)".

Following is my pom.xml

<name>Worship PPT</name>
<description>一个用于自动制作敬拜PPT的小工具</description>
......
<plugin>
    <groupId>io.github.fvarrui</groupId>
    <artifactId>javapackager</artifactId>
    <version>1.7.2</version>
    <executions>
        <execution>
            <phase>package</phase>
            <goals>
                <goal>package</goal>
            </goals>
            <configuration>
                <mainClass>claygminx.worshipppt.Main</mainClass>
                <bundleJre>true</bundleJre>
                <customizedJre>true</customizedJre>
                <jdkPath>C:\Program Files\Java\jdk1.8.0_351</jdkPath>
                <jrePath>jre</jrePath>
                <generateInstaller>false</generateInstaller>
                <administratorRequired>false</administratorRequired>
                <platform>auto</platform>
                <createZipball>true</createZipball>
                <createTarball>true</createTarball>
                <url>https://github.com/ClayGminx/worship-ppt</url>
                <additionalResources>
                    <additionalResource>config</additionalResource>
                    <additionalResource>PPT模板</additionalResource>
                    <additionalResource>数据库</additionalResource>
                    <additionalResource>README.md</additionalResource>
                </additionalResources>

                <winConfig>
                    <copyright>Joseph Mark</copyright>
                    <language>zh_CN</language>
                </winConfig>
            </configuration>
        </execution>
    </executions>
</plugin>

And following is the exe file detail info.

Worship PPT exe issue

@fvarrui fvarrui added bug Something isn't working duplicate This issue or pull request already exists labels May 17, 2023
@fvarrui
Copy link
Owner

fvarrui commented May 17, 2023

Hi @ClayGminx!
Please, take a look to issue #21. We haven't found an automated solution to this problem 😞

@fvarrui fvarrui added the question Further information is requested label May 18, 2023
@fvarrui
Copy link
Owner

fvarrui commented May 25, 2023

Hi @ClayGminx!
I've been researching a bit about this issue.

Please, could you try setting winConfig.language to SIMPLIFIED_CHINESE instead of zh_CN?

<plugin>
    <groupId>io.github.fvarrui</groupId>
    <artifactId>javapackager</artifactId>
    <version>1.7.2</version>
    <executions>
        <execution>
            <phase>package</phase>
            <goals>
                <goal>package</goal>
            </goals>
            <configuration>
                <mainClass>claygminx.worshipppt.Main</mainClass>
                <bundleJre>true</bundleJre>
                <customizedJre>true</customizedJre>
                <jdkPath>C:\Program Files\Java\jdk1.8.0_351</jdkPath>
                <jrePath>jre</jrePath>
                <generateInstaller>false</generateInstaller>
                <administratorRequired>false</administratorRequired>
                <platform>auto</platform>
                <createZipball>true</createZipball>
                <createTarball>true</createTarball>
                <url>https://github.com/ClayGminx/worship-ppt</url>
                <additionalResources>
                    <additionalResource>config</additionalResource>
                    <additionalResource>PPT模板</additionalResource>
                    <additionalResource>数据库</additionalResource>
                    <additionalResource>README.md</additionalResource>
                </additionalResources>

                <winConfig>
                    <copyright>Joseph Mark</copyright>
                    <language>SIMPLIFIED_CHINESE</language>
                </winConfig>
            </configuration>
        </execution>
    </executions>
</plugin>

@lhDream
Copy link
Contributor

lhDream commented Jun 5, 2023

@fvarrui
See #202 ResourceHacker.exe
How about a built-in ResourceHacker.exe ?

@lhDream
Copy link
Contributor

lhDream commented Jun 5, 2023

image
configuration used :

<plugin>
    <groupId>io.github.fvarrui</groupId>
    <artifactId>javapackager</artifactId>
    <version>1.7.2</version>
    <executions>
        <execution>
            <phase>package</phase>
            <goals>
                <goal>package</goal>
            </goals>
            <configuration>
                <displayName>中文测试</displayName>
                <mainClass>org.example.SignTest</mainClass>
                <bundleJre>true</bundleJre>
                <customizedJre>true</customizedJre>
                <jdkPath>C:\Program Files\Java\jdk1.8.0_171</jdkPath>
                <jrePath>${java.home}</jrePath>
                <generateInstaller>false</generateInstaller>
                <administratorRequired>false</administratorRequired>
                <platform>auto</platform>
                <createZipball>true</createZipball>
                <createTarball>true</createTarball>
                <url>https://github.com/ClayGminx/worship-ppt</url>
                <additionalResources>
                    <additionalResource>config</additionalResource>
                    <additionalResource>PPT模板</additionalResource>
                    <additionalResource>数据库</additionalResource>
                    <additionalResource>README.md</additionalResource>
                </additionalResources>

                <winConfig>
                    <copyright>Joseph Mark</copyright>
                    <language>SIMPLIFIED_CHINESE</language>
                </winConfig>
            </configuration>
        </execution>
    </executions>
</plugin>

@fvarrui
Copy link
Owner

fvarrui commented Jun 6, 2023

hi @lhDream!
Thanks for testing it

@fvarrui fvarrui added feedback Waiting for feedback and removed question Further information is requested labels Jun 6, 2023
@ClayGminx
Copy link
Author

Maybe due to the encoding of my pom.xml is UTF-8, but my win10 encoding is GBK. I test it usding SIMPLIFIED_CHINESE, but still messy code.

@ClayGminx
Copy link
Author

If due to different encoding, can you transform it?

@fvarrui
Copy link
Owner

fvarrui commented Jun 11, 2023

@fvarrui See #202 ResourceHacker.exe How about a built-in ResourceHacker.exe ?

image

We can't distribute RH with JavaPackager, but maybe JP can use it if the user pre-installs it, like it's done with Inno Setup, for example.

Right now JP is using rcedit which is under MIT license.

According to RH docs, it can be used from command line with its own scripting language:

ResourceHacker.exe -script ScriptFile

@fvarrui
Copy link
Owner

fvarrui commented Jun 11, 2023

After some testing I've realized that you can use winconfig.exeCreationTool=why|winrun4j ... these options set EXE file description fine.

<plugin>
    <groupId>io.github.fvarrui</groupId>
    <artifactId>javapackager</artifactId>
    <version>1.7.2</version>
    <executions>
        <execution>
            <phase>package</phase>
            <goals>
                <goal>package</goal>
            </goals>
            <configuration>
                <mainClass>claygminx.worshipppt.Main</mainClass>
                <bundleJre>true</bundleJre>
                <customizedJre>true</customizedJre>
                <jdkPath>C:\Program Files\Java\jdk1.8.0_351</jdkPath>
                <jrePath>jre</jrePath>
                <generateInstaller>false</generateInstaller>
                <administratorRequired>false</administratorRequired>
                <platform>auto</platform>
                <createZipball>true</createZipball>
                <createTarball>true</createTarball>
                <url>https://github.com/ClayGminx/worship-ppt</url>
                <additionalResources>
                    <additionalResource>config</additionalResource>
                    <additionalResource>PPT模板</additionalResource>
                    <additionalResource>数据库</additionalResource>
                    <additionalResource>README.md</additionalResource>
                </additionalResources>

                <winConfig>
                    <exeCreationTool>why</exeCreationTool> <!-- CHANGE HERE -->
                    <copyright>Joseph Mark</copyright>
                    <language>zh_CN</language>
                </winConfig>
            </configuration>
        </execution>
    </executions>
</plugin>

@fvarrui
Copy link
Owner

fvarrui commented Jun 12, 2023

I'm not sure if the problem is due to Launch4j or launch4j-maven-plugin. Have you tried to build your EXE using Launch4j GUI?

@ClayGminx
Copy link
Author

Hello! When I use

<exeCreationTool>why</exeCreationTool>

The package result is the following
2
I can't use my app normally.

And about Launch4j GUI, I have tried it, but I have not focus the detail info.

@fvarrui
Copy link
Owner

fvarrui commented Jun 13, 2023

Hi @ClayGminx!

I've been doing some tests with your project and I think I finally found a solution. I don't know why Why doesn't work for your application, but I got it to work using WinRun4J.

I also had to improve several things in JP, because some metadata was not being set in the EXE file when using why and winrun4j, and I published a SNAPSHOT version with the changes.

Set winConfig.exeCreationTool=winrun4j and use this JP SNAPSHOT version: 1.7.3-20230613.105302-8. You should also add the following snippet to your POM, so that Maven can find snapshots:

	<pluginRepositories>
		<pluginRepository>
			<id>nexus</id>
			<name>nexus-snapshot-repository</name>
			<url>https://oss.sonatype.org/content/repositories/snapshots</url>
			<snapshots>
				<enabled>true</enabled>
				<updatePolicy>always</updatePolicy>
			</snapshots>
			<releases>
				<enabled>false</enabled>
			</releases>
		</pluginRepository>
	</pluginRepositories>

Please, try it and give me some feedback. Thanks!

@fvarrui
Copy link
Owner

fvarrui commented Jun 13, 2023

I forgot it:

                    <execution>
                        <id>bundling-for-windows</id>
                        <phase>package</phase>
                        <goals>
                            <goal>package</goal>
                        </goals>
                        <configuration>
                            <platform>windows</platform>
                            <createZipball>false</createZipball>
                            <createTarball>false</createTarball>
                            <jrePath>C:\Program Files\Java\jdk1.8.0_211\jre</jrePath>
                            <winConfig>
                                <exeCreationTool>winrun4j</exeCreationTool>
                                <!--
                                <fileDescription>A worship PPT Tool</fileDescription>
                                -->
                                <copyright>Joseph Mark</copyright>
                            </winConfig>
                        </configuration>
                    </execution>

If you don't specify winConfig.fileDescription, JP uses the POM's description by default, and if you are bundling a JRE 8, you don't have to use jdkPath property, as this is only when you want to generate a customized JRE (only JDK 9+). You only have to specify jrePath property, pointing to the JRE you want to bundle with your app.

You can also download and unzip a JRE for MacOS on Windows and set platform=mac and jrePath=path/to/macos/jre... this will allow you to build the Mac OS application from Windows.

As your project is in a GitHub repo, I encourage you to use GitHub Actions to package and release your app for multiple platforms. It's a wonderful tool!

@ClayGminx
Copy link
Author

ClayGminx commented Jun 13, 2023

@fvarrui Thank you. I will try it soon.

@ClayGminx
Copy link
Author

@fvarrui Hello! I tried it. I used the following pom.xml

<build>
    <finalName>${project.name}-${project.version}</finalName>
    <resources>
        <resource>
            <directory>src/main/resources</directory>
            <filtering>true</filtering>
            <includes>
                <include>*.*</include>
                <include>templates/*.*</include>
            </includes>
        </resource>
    </resources>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-resources-plugin</artifactId>
            <version>3.1.0</version>
            <configuration>
                <encoding>UTF-8</encoding>
                <nonFilteredFileExtensions>
                    <nonFilteredFileExtension>pptx</nonFilteredFileExtension>
                    <nonFilteredFileExtension>db</nonFilteredFileExtension>
                </nonFilteredFileExtensions>
            </configuration>
        </plugin>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.5.1</version>
            <configuration>
                <source>${java.version}</source>
                <target>${java.version}</target>
                <annotationProcessorPaths>
                    <path>
                        <groupId>org.projectlombok</groupId>
                        <artifactId>lombok</artifactId>
                        <version>1.18.26</version>
                    </path>
                </annotationProcessorPaths>
            </configuration>
        </plugin>
        <plugin>
            <groupId>io.github.fvarrui</groupId>
            <artifactId>javapackager</artifactId>
            <version>1.7.3-20230613.105302-8</version>
            <configuration>
                <mainClass>claygminx.worshipppt.Main</mainClass>
                <bundleJre>true</bundleJre>
                <customizedJre>true</customizedJre>
                <url>https://github.com/ClayGminx/worship-ppt</url>
                <generateInstaller>false</generateInstaller>
                <administratorRequired>false</administratorRequired>
                <additionalResources>
                    <additionalResource>config</additionalResource>
                    <additionalResource>PPT模板</additionalResource>
                    <additionalResource>数据库</additionalResource>
                    <additionalResource>README.md</additionalResource>
                </additionalResources>
            </configuration>
            <executions>
                <execution>
                    <id>bundling-for-windows</id>
                    <phase>package</phase>
                    <goals>
                        <goal>package</goal>
                    </goals>
                    <configuration>
                        <platform>windows</platform>
                        <createZipball>true</createZipball>
                        <createTarball>false</createTarball>
                        <jrePath>jre-win</jrePath>
                        <winConfig>
                            <exeCreationTool>winrun4j</exeCreationTool>
                            <wrapJar>true</wrapJar>
                            <fileDescription>A worship PPT Tool</fileDescription>
                            <copyright>Joseph Mark</copyright>
                            <language>SIMPLIFIED_CHINESE</language>
                        </winConfig>
                    </configuration>
                </execution>
                <execution>
                    <id>bundling-for-mac</id>
                    <phase>package</phase>
                    <goals>
                        <goal>package</goal>
                    </goals>
                    <configuration>
                        <platform>mac</platform>
                        <createZipball>true</createZipball>
                        <createTarball>false</createTarball>
                        <jrePath>jre-mac</jrePath>
                        <macConfig>
                            <generateDmg>false</generateDmg>
                            <generatePkg>false</generatePkg>
                        </macConfig>
                    </configuration>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

<pluginRepositories>
    <pluginRepository>
        <id>nexus</id>
        <name>nexus-snapshot-repository</name>
        <url>https://oss.sonatype.org/content/repositories/snapshots</url>
        <snapshots>
            <enabled>true</enabled>
            <updatePolicy>always</updatePolicy>
        </snapshots>
        <releases>
            <enabled>false</enabled>
        </releases>
    </pluginRepository>
</pluginRepositories>

I tried to package in Intellij IDEA ULTIMATE 2020.1, and my OS is Windows 10 家庭中文版 22H2. However, the maven package failed. The last important package log is:

[INFO]         Executing command: cmd.exe /s /c ""C:\Program Files\Java\jdk1.8.0_351\jre\bin\jar" uf "D:\Workspace\worship-ppt\target\Worship PPT\libs\winrun4j-launcher.jar" winrun4j.properties"
[ERROR]         '"C:\Program Files\Java\jdk1.8.0_351\jre\bin\jar"' �����ڲ����ⲿ���Ҳ���ǿ����еij���
[ERROR]         ���������ļ���

Then I tried to execute the command from the above log in cmd.exe:

"C:\Program Files\Java\jdk1.8.0_351\jre\bin\jar" uf "D:\Workspace\worship-ppt\target\Worship PPT\libs\winrun4j-launcher.jar" winrun4j.properties

But failed.

'"C:\Program Files\Java\jdk1.8.0_351\jre\bin\jar"' 不是内部或外部命令,也不是可运行的程序
或批处理文件。

@fvarrui
Copy link
Owner

fvarrui commented Jun 14, 2023

@ClayGminx it seems to be using JRE instead of JDK path, since it could't find the jar command. Please, could you run mvn -v on your system and share here its output?

@ClayGminx
Copy link
Author

Apache Maven 3.6.3 (cecedd343002696d0abb50b32b541b8a6ba2883f)
Maven home: D:\Apps\apache-maven-3.6.3\bin..
Java version: 1.8.0_351, vendor: Oracle Corporation, runtime: C:\Program Files\Java\jdk1.8.0_351\jre
Default locale: zh_CN, platform encoding: GBK
OS name: "windows 10", version: "10.0", arch: "amd64", family: "windows"

@ClayGminx
Copy link
Author

@fvarrui Thank you for your suggestion that I can package using GitHub Action, but I want to use customized jre, because the jre on Windows OS is too large.

@fvarrui
Copy link
Owner

fvarrui commented Jun 14, 2023

@fvarrui Thank you for your suggestion that I can package using GitHub Action, but I want to use customized jre, because the jre on Windows OS is too large.

If you want to generate a customized JRE you need a higher Java version (JDK 9+), which includes jlink tool.

@fvarrui
Copy link
Owner

fvarrui commented Jun 14, 2023

Apache Maven 3.6.3 (cecedd343002696d0abb50b32b541b8a6ba2883f) Maven home: D:\Apps\apache-maven-3.6.3\bin.. Java version: 1.8.0_351, vendor: Oracle Corporation, runtime: C:\Program Files\Java\jdk1.8.0_351\jre Default locale: zh_CN, platform encoding: GBK OS name: "windows 10", version: "10.0", arch: "amd64", family: "windows"

I think you should set JAVA_HOME=C:\Program Files\Java\jdk1.8.0_351 instead of C:\Program Files\Java\jdk1.8.0_351\jre. Please, could you try this and give some feedback?

This is mine:

C:\> mvn -v
Apache Maven 3.9.0 (9b58d2bad23a66be161c4664ef21ce219c2c8584)
Maven home: C:\ProgramData\chocolatey\lib\maven\apache-maven-3.9.0
Java version: 19.0.2, vendor: Eclipse Adoptium, runtime: C:\Program Files\Eclipse Adoptium\jdk-19.0.2.7-hotspot
Default locale: es_ES, platform encoding: UTF-8
OS name: "windows 11", version: "10.0", arch: "amd64", family: "windows"

@ClayGminx
Copy link
Author

My JAVA_HOME is C:\Program Files\Java\jdk1.8.0_351

@fvarrui
Copy link
Owner

fvarrui commented Jun 27, 2023

I tried to package in Intellij IDEA ULTIMATE 2020.1, and my OS is Windows 10 家庭中文版 22H2. However, the maven package failed. The last important package log is:

[INFO]         Executing command: cmd.exe /s /c ""C:\Program Files\Java\jdk1.8.0_351\jre\bin\jar" uf "D:\Workspace\worship-ppt\target\Worship PPT\libs\winrun4j-launcher.jar" winrun4j.properties"
[ERROR]         '"C:\Program Files\Java\jdk1.8.0_351\jre\bin\jar"' �����ڲ����ⲿ���Ҳ���ǿ����еij���
[ERROR]         ���������ļ���

Then I tried to execute the command from the above log in cmd.exe:

"C:\Program Files\Java\jdk1.8.0_351\jre\bin\jar" uf "D:\Workspace\worship-ppt\target\Worship PPT\libs\winrun4j-launcher.jar" winrun4j.properties

But failed.

'"C:\Program Files\Java\jdk1.8.0_351\jre\bin\jar"' 不是内部或外部命令,也不是可运行的程序
或批处理文件。

Hi @ClayGminx!
No news, good news? 😅

I'm not sure what's wrong in your config, but as you can see in mvn -v output, Maven is using a JRE instead of a JDK:

Apache Maven 3.6.3 (cecedd343002696d0abb50b32b541b8a6ba2883f)
Maven home: D:\Apps\apache-maven-3.6.3\bin..
Java version: 1.8.0_351, vendor: Oracle Corporation, runtime: C:\Program Files\Java\jdk1.8.0_351\jre
Default locale: zh_CN, platform encoding: GBK
OS name: "windows 10", version: "10.0", arch: "amd64", family: "windows"

When you use WinRun4J with JP, it generates a winrun4j.properties file, and includes this file in winrun4j-launcher.jar using the jar command, which is not included within the JRE.

winrun4j-launcher.jar is a work around to a WinRun4J limitation: it only can run a class without package (stored in the root package). winrun4j-launcher.jar includes this class which acts as a launcher for your main class. This launcher class reads winrun4j.properties file to know what is your main class.

But as I said before, if you want a customized JRE you have to use a JDK 9+.

@ClayGminx
Copy link
Author

@fvarrui I'm waiting for your reply in fact. I believe my config of Java and Maven is true. Although I switch Maven version from 3.6 to 3.9, the runtime of Maven is still C:\Program Files\Java\jdk1.8.0_351\jre.

When I edit my reply, I try to switch my JDK version to 17 which doesn't have jre directory, and I set JAVA_HOME to C:\Program Files\Java\jdk-17.0.7, then I try the command mvn -v, the output is

Apache Maven 3.9.3 (21122926829f1ead511c958d89bd2f672198ae9f)
Maven home: D:\Apps\apache-maven-3.9.3
Java version: 17.0.7, vendor: Oracle Corporation, runtime: C:\Program Files\Java\jdk-17.0.7
Default locale: zh_CN, platform encoding: GBK
OS name: "windows 10", version: "10.0", arch: "amd64", family: "windows"

Although, I don't want to upgrade my JDK version.

Additionally, the method of using customized JRE 8 or reducing JRE 8 is removing files about JavaFX.

@fvarrui
Copy link
Owner

fvarrui commented Jul 5, 2023

My JAVA_HOME is C:\Program Files\Java\jdk1.8.0_351

This confused me a bit, since mvn -v says that C:\Program Files\Java\jdk1.8.0_351\jre is the Java runtime. It's a bit weird, but I think I have a solution.

As I mentioned earlier, JP uses the JDK's jar command. The problem is that with Java 8, Maven points to your JRE (%JAVA_HOME%\jre), instead of what is indicated in the JAVA_HOME variable. I don't know why, but it is so. The jar command is not in the JRE, but in the JDK, hence the error.

[INFO]         Executing command: cmd.exe /s /c ""C:\Program Files\Java\jdk1.8.0_351\jre\bin\jar" uf "D:\Workspace\worship-ppt\target\Worship PPT\libs\winrun4j-launcher.jar" winrun4j.properties"
[ERROR]         '"C:\Program Files\Java\jdk1.8.0_351\jre\bin\jar"' �����ڲ����ⲿ���Ҳ���ǿ����еij���
[ERROR]         ���������ļ���

Here the code:

public static void addFileToJar(File jarFile, File newFile) throws IOException, CommandLineException {
File jar = new File(System.getProperty("java.home"), "/bin/jar");
CommandUtils.executeOnDirectory(newFile.getParentFile(), jar.getAbsolutePath(), "uf", jarFile, newFile.getName());
}

I think that replacing line 11 with next fix the problem:

File jar = new File(System.getenv("JAVA_HOME"), "/bin/jar");

so jar variable points to:

  • C:\Program Files\Java\jdk1.8.0_351\bin\jar (System.getenv("JAVA_HOME") + "\bin\jar")
    instead of
  • C:\Program Files\Java\jdk1.8.0_351\jre\bin\jar (System.getProperty("java.home") + "\bin\jar")

@fvarrui
Copy link
Owner

fvarrui commented Jul 5, 2023

If you agree with me, I'll code a patch for this and publish a snapshot version, so you can test it.

@fvarrui
Copy link
Owner

fvarrui commented Jul 5, 2023

Changes made in branch issue-325.

@ClayGminx
Copy link
Author

Thank you! Agree.

@ClayGminx
Copy link
Author

@fvarrui Thank you. Now when I use the snapshot version 1.7.3-20230710.112156-15, my exe file can display Chinese text normally.
When will you publish the 1.7.3?
1
2

@fvarrui
Copy link
Owner

fvarrui commented Jul 20, 2023

issue-325 branch merged into devel, ready to be released in v1.7.3

@fvarrui fvarrui added the fixed Issue fixed and release pending label Jul 20, 2023
@fvarrui fvarrui added the merged Changes merged into devel branch label Aug 11, 2023
@fvarrui
Copy link
Owner

fvarrui commented Aug 11, 2023

1.7.3 released to Maven Central

@fvarrui fvarrui closed this as completed Aug 11, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working duplicate This issue or pull request already exists feedback Waiting for feedback fixed Issue fixed and release pending merged Changes merged into devel branch
Projects
None yet
Development

No branches or pull requests

3 participants