Java FX 应用程序安装在同一目录中
Java FX Applications Installing in Same Directory
我有两个单独的 JavaFX 应用程序,我使用 here 描述的方法将其部署为本机 Windows exe,但安装选项设置为 true 以便它安装在 C: 驱动器中,不是应用程序数据。由于某种原因,两个应用程序都安装到同一目录中,并且都使用相同的卸载文件,这对我来说是一个严重的问题。它安装到的目录是首先安装的程序。例如,如果我先安装 Program1,它们都会安装到 C:/Program Files/Program1。如果先安装 Program2,它们都会安装到 C:/Program Files/Program2。它们都在 Inno Setup 文件中设置了默认目录,并且它们是不同的。以前有人 运行 遇到过这个问题吗?谢谢!
这是从程序 1 上的 ant 构建生成的 Inno 安装文件
;This file will be executed next to the application bundle image
;I.e. current directory will contain folder Program1 with application files
[Setup]
AppId={{fxApplication}}
AppName=Program1
AppVersion=1.4.0
AppVerName=Program1 1.4.0
AppPublisher=My Company
AppComments=Program1FX
AppCopyright=Copyright (C) 2015
;AppPublisherURL=http://java.com/
;AppSupportURL=http://java.com/
;AppUpdatesURL=http://java.com/
DefaultDirName={pf}\Program1
DisableStartupPrompt=Yes
DisableDirPage=Yes
DisableProgramGroupPage=Yes
DisableReadyPage=Yes
DisableFinishedPage=Yes
DisableWelcomePage=Yes
DefaultGroupName=My Company
;Optional License
LicenseFile=
;WinXP or above
MinVersion=0,5.1
OutputBaseFilename=Program1-1.4.0
Compression=lzma
SolidCompression=yes
PrivilegesRequired=admin
SetupIconFile=Program1\Program1.ico
UninstallDisplayIcon={app}\Program1.ico
UninstallDisplayName=Program1
WizardImageStretch=No
WizardSmallImageFile=Program1-setup-icon.bmp
ArchitecturesInstallIn64BitMode=x64
[Languages]
Name: "english"; MessagesFile: "compiler:Default.isl"
[Files]
Source: "Program1\Program1.exe"; DestDir: "{app}"; Flags: ignoreversion
Source: "Program1\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs
[Icons]
Name: "{group}\Program1"; Filename: "{app}\Program1.exe"; IconFilename: "{app}\Program1.ico"; Check: returnTrue()
Name: "{commondesktop}\Program1"; Filename: "{app}\Program1.exe"; IconFilename: "{app}\Program1.ico"; Check: returnTrue()
[Run]
Filename: "{app}\Program1.exe"; Parameters: "-Xappcds:generatecache"; Check: returnFalse()
Filename: "{app}\Program1.exe"; Description: "{cm:LaunchProgram,Program1}"; Flags: nowait postinstall skipifsilent; Check: returnTrue()
Filename: "{app}\Program1.exe"; Parameters: "-install -svcName ""Program1"" -svcDesc ""Program1"" -mainExe ""Program1.exe"" "; Check: returnFalse()
[UninstallRun]
Filename: "{app}\Program1.exe "; Parameters: "-uninstall -svcName Program1 -stopOnUninstall"; Check: returnFalse()
[Code]
function returnTrue(): Boolean;
begin
Result := True;
end;
function returnFalse(): Boolean;
begin
Result := False;
end;
function InitializeSetup(): Boolean;
begin
// Possible future improvements:
// if version less or same => just launch app
// if upgrade => check if same app is running and wait for it to exit
// Add pack200/unpack200 support?
Result := True;
end;
对于计划 2
;This file will be executed next to the application bundle image
;I.e. current directory will contain folder Program2 with application files
[Setup]
AppId={{fxApplication}}
AppName=Program2
AppVersion=1.3.1
AppVerName=Program2 1.3.1
AppPublisher=My Company
AppComments=Program2
AppCopyright=Copyright (C) 2015
;AppPublisherURL=http://java.com/
;AppSupportURL=http://java.com/
;AppUpdatesURL=http://java.com/
DefaultDirName={pf}\Program2
DisableStartupPrompt=Yes
DisableDirPage=Yes
DisableProgramGroupPage=Yes
DisableReadyPage=Yes
DisableFinishedPage=Yes
DisableWelcomePage=Yes
DefaultGroupName=My Company
;Optional License
LicenseFile=
;WinXP or above
MinVersion=0,5.1
OutputBaseFilename=Program2-1.3.1
Compression=lzma
SolidCompression=yes
PrivilegesRequired=admin
SetupIconFile=Program2\Program2.ico
UninstallDisplayIcon={app}\Program2.ico
UninstallDisplayName=Program2
WizardImageStretch=No
WizardSmallImageFile=Program2-setup-icon.bmp
ArchitecturesInstallIn64BitMode=x64
[Languages]
Name: "english"; MessagesFile: "compiler:Default.isl"
[Files]
Source: "Program2\Program2.exe"; DestDir: "{app}"; Flags: ignoreversion
Source: "Program2\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs
[Icons]
Name: "{group}\Program2"; Filename: "{app}\Program2.exe"; IconFilename: "{app}\Program2.ico"; Check: returnTrue()
Name: "{commondesktop}\Program2"; Filename: "{app}\Program2.exe"; IconFilename: "{app}\Program2.ico"; Check: returnTrue()
[Run]
Filename: "{app}\Program2.exe"; Parameters: "-Xappcds:generatecache"; Check: returnFalse()
Filename: "{app}\Program2.exe"; Description: "{cm:LaunchProgram,Program2}"; Flags: nowait postinstall skipifsilent; Check: returnTrue()
Filename: "{app}\Program2.exe"; Parameters: "-install -svcName ""Program2"" -svcDesc ""Program2"" -mainExe ""Program2.exe"" "; Check: returnFalse()
[UninstallRun]
Filename: "{app}\Program2.exe "; Parameters: "-uninstall -svcName Program2 -stopOnUninstall"; Check: returnFalse()
[Code]
function returnTrue(): Boolean;
begin
Result := True;
end;
function returnFalse(): Boolean;
begin
Result := False;
end;
function InitializeSetup(): Boolean;
begin
// Possible future improvements:
// if version less or same => just launch app
// if upgrade => check if same app is running and wait for it to exit
// Add pack200/unpack200 support?
Result := True;
end;
好吧,我不敢相信我以前没有看到它,但问题是 AppId
build.fxbuild默认设置id
为fxApplication
,手动编辑build.fxbuild 拥有一个独特的应用程序 id
。 build.fxbuild 中还有其他一些地方引用了 fxApplication
,因此请确保也更改它们
<fx:application id="UNIQUE_NAME_HERE"
... />
我有两个单独的 JavaFX 应用程序,我使用 here 描述的方法将其部署为本机 Windows exe,但安装选项设置为 true 以便它安装在 C: 驱动器中,不是应用程序数据。由于某种原因,两个应用程序都安装到同一目录中,并且都使用相同的卸载文件,这对我来说是一个严重的问题。它安装到的目录是首先安装的程序。例如,如果我先安装 Program1,它们都会安装到 C:/Program Files/Program1。如果先安装 Program2,它们都会安装到 C:/Program Files/Program2。它们都在 Inno Setup 文件中设置了默认目录,并且它们是不同的。以前有人 运行 遇到过这个问题吗?谢谢!
这是从程序 1 上的 ant 构建生成的 Inno 安装文件
;This file will be executed next to the application bundle image
;I.e. current directory will contain folder Program1 with application files
[Setup]
AppId={{fxApplication}}
AppName=Program1
AppVersion=1.4.0
AppVerName=Program1 1.4.0
AppPublisher=My Company
AppComments=Program1FX
AppCopyright=Copyright (C) 2015
;AppPublisherURL=http://java.com/
;AppSupportURL=http://java.com/
;AppUpdatesURL=http://java.com/
DefaultDirName={pf}\Program1
DisableStartupPrompt=Yes
DisableDirPage=Yes
DisableProgramGroupPage=Yes
DisableReadyPage=Yes
DisableFinishedPage=Yes
DisableWelcomePage=Yes
DefaultGroupName=My Company
;Optional License
LicenseFile=
;WinXP or above
MinVersion=0,5.1
OutputBaseFilename=Program1-1.4.0
Compression=lzma
SolidCompression=yes
PrivilegesRequired=admin
SetupIconFile=Program1\Program1.ico
UninstallDisplayIcon={app}\Program1.ico
UninstallDisplayName=Program1
WizardImageStretch=No
WizardSmallImageFile=Program1-setup-icon.bmp
ArchitecturesInstallIn64BitMode=x64
[Languages]
Name: "english"; MessagesFile: "compiler:Default.isl"
[Files]
Source: "Program1\Program1.exe"; DestDir: "{app}"; Flags: ignoreversion
Source: "Program1\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs
[Icons]
Name: "{group}\Program1"; Filename: "{app}\Program1.exe"; IconFilename: "{app}\Program1.ico"; Check: returnTrue()
Name: "{commondesktop}\Program1"; Filename: "{app}\Program1.exe"; IconFilename: "{app}\Program1.ico"; Check: returnTrue()
[Run]
Filename: "{app}\Program1.exe"; Parameters: "-Xappcds:generatecache"; Check: returnFalse()
Filename: "{app}\Program1.exe"; Description: "{cm:LaunchProgram,Program1}"; Flags: nowait postinstall skipifsilent; Check: returnTrue()
Filename: "{app}\Program1.exe"; Parameters: "-install -svcName ""Program1"" -svcDesc ""Program1"" -mainExe ""Program1.exe"" "; Check: returnFalse()
[UninstallRun]
Filename: "{app}\Program1.exe "; Parameters: "-uninstall -svcName Program1 -stopOnUninstall"; Check: returnFalse()
[Code]
function returnTrue(): Boolean;
begin
Result := True;
end;
function returnFalse(): Boolean;
begin
Result := False;
end;
function InitializeSetup(): Boolean;
begin
// Possible future improvements:
// if version less or same => just launch app
// if upgrade => check if same app is running and wait for it to exit
// Add pack200/unpack200 support?
Result := True;
end;
对于计划 2
;This file will be executed next to the application bundle image
;I.e. current directory will contain folder Program2 with application files
[Setup]
AppId={{fxApplication}}
AppName=Program2
AppVersion=1.3.1
AppVerName=Program2 1.3.1
AppPublisher=My Company
AppComments=Program2
AppCopyright=Copyright (C) 2015
;AppPublisherURL=http://java.com/
;AppSupportURL=http://java.com/
;AppUpdatesURL=http://java.com/
DefaultDirName={pf}\Program2
DisableStartupPrompt=Yes
DisableDirPage=Yes
DisableProgramGroupPage=Yes
DisableReadyPage=Yes
DisableFinishedPage=Yes
DisableWelcomePage=Yes
DefaultGroupName=My Company
;Optional License
LicenseFile=
;WinXP or above
MinVersion=0,5.1
OutputBaseFilename=Program2-1.3.1
Compression=lzma
SolidCompression=yes
PrivilegesRequired=admin
SetupIconFile=Program2\Program2.ico
UninstallDisplayIcon={app}\Program2.ico
UninstallDisplayName=Program2
WizardImageStretch=No
WizardSmallImageFile=Program2-setup-icon.bmp
ArchitecturesInstallIn64BitMode=x64
[Languages]
Name: "english"; MessagesFile: "compiler:Default.isl"
[Files]
Source: "Program2\Program2.exe"; DestDir: "{app}"; Flags: ignoreversion
Source: "Program2\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs
[Icons]
Name: "{group}\Program2"; Filename: "{app}\Program2.exe"; IconFilename: "{app}\Program2.ico"; Check: returnTrue()
Name: "{commondesktop}\Program2"; Filename: "{app}\Program2.exe"; IconFilename: "{app}\Program2.ico"; Check: returnTrue()
[Run]
Filename: "{app}\Program2.exe"; Parameters: "-Xappcds:generatecache"; Check: returnFalse()
Filename: "{app}\Program2.exe"; Description: "{cm:LaunchProgram,Program2}"; Flags: nowait postinstall skipifsilent; Check: returnTrue()
Filename: "{app}\Program2.exe"; Parameters: "-install -svcName ""Program2"" -svcDesc ""Program2"" -mainExe ""Program2.exe"" "; Check: returnFalse()
[UninstallRun]
Filename: "{app}\Program2.exe "; Parameters: "-uninstall -svcName Program2 -stopOnUninstall"; Check: returnFalse()
[Code]
function returnTrue(): Boolean;
begin
Result := True;
end;
function returnFalse(): Boolean;
begin
Result := False;
end;
function InitializeSetup(): Boolean;
begin
// Possible future improvements:
// if version less or same => just launch app
// if upgrade => check if same app is running and wait for it to exit
// Add pack200/unpack200 support?
Result := True;
end;
好吧,我不敢相信我以前没有看到它,但问题是 AppId
build.fxbuild默认设置id
为fxApplication
,手动编辑build.fxbuild 拥有一个独特的应用程序 id
。 build.fxbuild 中还有其他一些地方引用了 fxApplication
,因此请确保也更改它们
<fx:application id="UNIQUE_NAME_HERE"
... />