Qual é a melhor maneira de iniciar aplicativos Java no Windows

Requisitos

Eu quero publicar um aplicativo Java GUI no Windows 7. Este aplicativo está usando o Swing Toolkit e não precisa de nenhum código nativo. O aplicativo é instalado usando um NSIS instalador. Quero integrar este aplicativo ao Windows 7 da melhor maneira possível. Isso significa

Quando o aplicativo estiver em execução, deve ser possível fixá-lo na barra de tarefaDeve ser possível associar arquivos de dados ao aplicativo para que o Windows os abra com o meu aplicativ @Must trabalha automaticamente com o Java Runtime de 32 bits e com o Java Runtime de 64 bits. Portanto, quando o usuário desinstala um Java de 32 bits e instala um Java de 64 bits (ou vice-versa), meu aplicativo ainda deve funciona Deve suportar a configuração de fontes grandes do Windows. Eu realmente não entendo esse recurso. Eu apenas sei que alguns aplicativos o ignoram completamente, outros (como o Google Chrome) têm escala de pixels (parece realmente feia) e outros o suportam simplesmente usando fontes maiores conforme o esperado (é o que eu quero e normalmente funciona.) Somente a solução WinRun4J mencionado abaixo não funciona com ele). Soluções testadas WinRun4J

WinRun4j é um arquivo EXE que inicia o aplicativo Java. Como o aplicativo não bifurca um novo processo Java, o Windows acha que o arquivo EXE é o aplicativo. Portanto, não há nenhum problema com a barra de tarefas. As associações de arquivos funcionam porque os arquivos podem ser simplesmente associados ao arquivo EXE.

Problems:

Não suporta fontes grandes. A janela do aplicativo é redimensionada em pixels (como o Google Chrome). Dois arquivos EXE diferentes devem ser usados, dependendo do JRE instalado. Portanto, quando o JRE de 64 bits estiver instalado, o aplicativo deverá ser iniciado com o arquivo EXE de 64 bits. Quando o JRE de 32 bits estiver instalado, o outro EXE deverá ser usado. Isso não é fácil de usar porque o usuário não entende por que ele deve usar o EXE de 32 bits em um sistema operacional de 64 bits quando apenas um JRE de 32 bits está instalad Launch4J

Launch4J cria um EXE de 32 bits que inicia um processo Java externo para iniciar o aplicativo Java. Portanto, ao contrário do WinRun4J, ele também pode iniciar um Java de 64 bit

Problems:

Não é possível fixar o aplicativo na barra de tarefaSystem.out.println não será impresso no console seheaderType="gui", independentemente de o aplicativo ser iniciado no consol JAR

No Windows, você pode simplesmente clicar duas vezes no arquivo JAR para iniciar o aplicativo. O JRE instalado não importa, simplesmente funciona. Mas..

Problems:

O aplicativo não pode ser fixado na barra de tarefa Não é possível criar um atalho no menu Inicia Não é possível associar arquivos a um arquivo JA MTD / CMD

Um arquivo em lotes simples como este pode ser usado para iniciar o aplicativo:

@echo off
start c:\windows\system32\javaw.exe -jar "c:\program files\myapp\myapp.jar" %1

É possível criar um atalho para este arquivo em lotes para definir um ícone personalizad

Problems:

Uma janela do DOS aparece quando o aplicativo é iniciad O arquivo em lotes não sabe onde o javaw.exe está localizado. Dependendo da versão java (32 ou 64 bits) instalada, ela pode estar localizada emc:\windows\syswow64 e o Windows não redireciona essa chamada de arquivos em lotes automaticamente. Usando oJAVA_HOME variável de ambiente também não é possível porque o Java não define isso automaticament Ao associar arquivos ao arquivo em lotes, nenhum ícone personalizado pode ser definid suporte ao @Taskbar não está funcionando corretamente. O aplicativo pode ser fixado a ele quando o arquivo em lotes é iniciado manualmente, mas ao clicar duas vezes em um arquivo associado, ele não funcionAtalh

Em vez de usar um arquivo em lotes, é possível criar apenas um atalho para iniciar o aplicativo. Ele vincula a este comando:c:\windows\system32\javaw.exe -jar "c:\program files\myapp\myapp.jar". O Windows redireciona automaticamente essa chamada para o diretório SysWOW64 se um Java JRE de 32 bits estiver instalad

Problems:

Não é possível associar arquivos a ele porque o Windows aceita apenas arquivos EXE / COM / PIF / BAT / CMD como destinos de associação. Os arquivos LNK não funcionam.Questã

Existe outra solução que atenda a todos os requisitos acima? Ou existem truques para resolver os problemas com as soluções mencionadas?

Soluçã

Depois de resolver o problema de fixação da barra de tarefas usando Launch4j parece a melhor solução. O Launch4j pode ser facilmente integrado a um projeto Maven (Withest ouest plugin), a configuração é bastante fácil e tudo funciona imediatamente, exceto a fixação na barra de tarefas. Para fixação da barra de tarefas, o aplicativo Java deve definir um appModelUserId, conforme explicado na resposta paraessa questã.

Adicionalmente, o aplicativo Java deve ser instalado por um instalador, que deve pelo menos instalar um atalho apontando para o EXE. Este atalho também deve conter o appModelUserId. Com o NSIS, isso pode ser feito com oWinShell plugin e uma configuração como esta:

CreateShortCut "$SMPROGRAMS\MyApp.lnk" \
    "$INSTDIR\myapp.exe" "" "$INSTDIR\myapp.exe" 0 SW_SHOWNORMAL
WinShell::SetLnkAUMI "$SMPrograms\MyApp.lnk" "MyAppModelUserId"

Por alguma razão desconhecida, esse atalho precisa apenas existir. Você não precisa usá-lo. Você pode clicar duas vezes no EXE e a fixação da barra de tarefas ainda funciona. Você pode até criar o atalho em alguma subpasta da pasta do aplicativo. A fixação da barra de tarefas para de funcionar quando o último atalho do arquivo EXE é removid

questionAnswers(10)

yourAnswerToTheQuestion