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

时间:2015-03-09 23:31:44

标签: 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,我发现问题在于记录器本身。将编辑我的代码并根据其工作方式进行更新

1 个答案:

答案 0 :(得分:1)

<强>解

感谢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后工作了!!