java - 包装和使用安装程序后可执行文件不会在 Windows 上退出

标签 java exe inno-setup launch4j advanced-installer

我正在尝试使用 jar 文件创建 Windows 安装程序。一切顺利,直到最后阶段。

我使用 launch4j 将 jar 文件打包成一个 exe 文件,然后使用 Advanced-Installer 和 Inno-Setup 来创建 MSI 文件夹。它们都可以工作,但是,在某些计算机上,提取的 exe 文件不会关闭,只能使用任务管理器将其终止。

在我的 Java 文件中,我处理退出过程(最终使用 System.exit(0)),因为我想询问用户是否希望在退出前保存文件。

这是我的代码:

exitListener = new ExitListener();
    theMainFrame.addWindowListener(new WindowAdapter() {

        @Override
        public void windowClosing(WindowEvent e) {
            ProgramLog.logException(Level.SEVERE, "Problem...WindowsClosing method", new Exception());
            exitListener.actionPerformed(null);
        }
    });

记录器在它是 jar 时工作正常(创建文件并给出异常),在它是 exe 时工作正常但是一旦我将它包装到 MSI 中,一旦打开它就不会关闭并且我没有看到任何记录这意味着它没有到达 windowClosing 事件。

我已经在两台 Windows 计算机上单独尝试了 exe 文件,它运行良好(保存并退出);但是一旦从安装程序中提取出来,它就不会退出。

任何建议表示赞赏。

编辑

感谢 MadProgrammer,我发现问题出在记录器本身。将根据结果编辑我的代码并进行更新

最佳答案

解决方案

感谢 MadProgrammer,我发现问题出在 Logger 的保存位置,而不是某些 Windows 机器没有退出可执行文件。我已将位置从 ProgramFiles 文件夹更改为 {user.home}\AppData\Local{Program company}{Program name}

我之前的记录器代码是

   public ProgramLog() {

      try {
         FileHandler handler = new FileHandler(logFile);
         logger = Logger.getLogger("com.program.msgs");
         logger.addHandler(handler);

      } catch (Exception e) {
      }
   }

我已将其编辑为

public ProgramLog() {

    try {
        String path = System.getProperty("user.home") + File.separator
                + "AppData" + File.separator + "Local" + File.separator
                + "CompanyName" + File.separator + "CompanyProduct" + File.separator;

        File f = new File(path);
        f.mkdirs();

        FileHandler handler = new FileHandler(path + logFile);
        logger = Logger.getLogger("com.program.msgs");
        logger.addHandler(handler);

    } catch (Exception e) {
    }
}

现在我的可执行文件在将其包装到 MSI 后可以工作了!!

关于java - 包装和使用安装程序后可执行文件不会在 Windows 上退出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28953636/

相关文章:

window - Inno安装程序更改c :\permission

java - WSDL 客户端中的 CDATA 元素

java 将一个数组除以它的元素

Java跨平台文件操作

windows - 通过网络运行 VB6 exe - 它会在执行期间制作本地副本吗?

c# - 如何在 Azure 应用服务中运行 .EXE

windows - .dll 和 .exe 的区别?

windows - 使用 Innosetup 在我安装的软件上激活 UAC

inno-setup - 您如何在Inno Setup中找到用户选择的安装路径?

java - 如何将来自外部服务调用的响应与 Camel 中的原始消息合并