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

New Julia installation overwrites Windows uninstall entry #40004

Closed
jebej opened this issue Mar 13, 2021 · 3 comments · Fixed by #40163
Closed

New Julia installation overwrites Windows uninstall entry #40004

jebej opened this issue Mar 13, 2021 · 3 comments · Fixed by #40163

Comments

@jebej
Copy link
Contributor

jebej commented Mar 13, 2021

I installed Julia 1.5.4 and 1.6.0-rc2 one after the other, and the entry in the "Programs and Features" / "Apps and feature" menus for 1.5.4 was removed and replaced by the one for 1.6.0-rc2.

I assume this is probably caused by some registry key being overwritten.

@jaakkor2
Copy link
Contributor

Inno Setup AppId is defined here for v1.6.0-rc3 https://github.com/JuliaLang/julia/blob/v1.6.0-rc3/contrib/windows/build-installer.iss#L5-L7

#ifndef AppId
#define AppId "{{054B4BC6-BD30-45C8-A623-8F5BA6EBD55D}"
#endif

and here for v1.5.4 https://github.com/JuliaLang/julia/blob/v1.5.4/contrib/windows/build-installer.iss#L48

AppId={{054B4BC6-BD30-45C8-A623-8F5BA6EBD55D}

The AppId is the same. Docs say https://jrsoftware.org/ishelp/index.php?topic=setup_appid

AppId also determines the actual name of the Uninstall registry key, to which Inno Setup tacks on "_is1" at the end.

Julia v1.6.0 has the possibility to pass the AppId from the Makefile, but that option is not used
https://github.com/JuliaLang/julia/blob/v1.6.0-rc3/Makefile#L429-L432

exe:
	# run Inno Setup to compile installer
	$(call spawn,$(JULIAHOME)/dist-extras/inno/iscc.exe /DAppVersion=$(JULIA_VERSION) /DSourceDir="$(call cygpath_w,$(BUILDROOT)/julia-$(JULIA_COMMIT))" /DRepoDir="$(call cygpath_w,$(JULIAHOME))" /F"$(JULIA_BINARYDIST_FILENAME)" /O"$(call cygpath_w,$(BUILDROOT))" $(INNO_ARGS) $(call cygpath_w,$(JULIAHOME)/contrib/windows/build-installer.iss))
	chmod a+x "$(BUILDROOT)/$(JULIA_BINARYDIST_FILENAME).exe"

Indeed, my Windows registry has a key
Computer\HKEY_USERS\...\Software\Microsoft\Windows\CurrentVersion\Uninstall\{054B4BC6-BD30-45C8-A623-8F5BA6EBD55D}_is1
and Julia versions using the same uninstall key is the issue here.

If I understood correctly, Inno Setup AppId does not have to look like GUID/uuid4, but can be plain text, so maybe AppId could be AppNameLong to prevent the issue?

CC'ing @musm and @staticfloat as they have written or edited the lines in question.

@strickek
Copy link
Contributor

Dup of #36933?

@musm
Copy link
Contributor

musm commented Mar 24, 2021

yep closed as dupe

@musm musm closed this as completed Mar 24, 2021
musm added a commit that referenced this issue Mar 25, 2021
…40163)

* Have different Windows uninstall keys for different Julia versions

Should fix #40004.  Have the uninstall key to be "{#AppNameLong}_is1" where AppNameLong contains the Julia version to prevent Windows from overwriting the uninstall information for different Julia versions.

Inno Setup documentation about the AppId https://jrsoftware.org/ishelp/topic_setup_appid.htm copied here for convenience
```
[Setup]: AppId

Default value:
	
AppName
Description:

The value of AppId is stored inside uninstall log files (unins???.dat), and is checked by subsequent installations to determine whether it may append to a particular existing uninstall log. Setup will only append to an uninstall log if the AppId of the existing uninstall log is the same as the current installation's AppId. For a practical example, say you have two installations -- one entitled My Program and the other entitled My Program 1.1 Update. To get My Program 1.1 Update to append to My Program's uninstall log, you would have to set AppId to the same value in both installations.

AppId also determines the actual name of the Uninstall registry key, to which Inno Setup tacks on "_is1" at the end. (Therefore, if AppId is "MyProgram", the key will be named "MyProgram_is1".) Pre-1.3 versions of Inno Setup based the key name on the value of AppVerName.

AppId is a not used for display anywhere, so feel free to make it as cryptic as you desire. The value may include constants.

If you use a {code:..} constant to allow your user to customize AppId, you do not need to return the real value until just before the installation starts: if necessary you may return an empty or generic value at earlier times. If not empty, this value will only be used to attempt to restore previous install settings (like the settings stored by [Setup] section directive UsePreviousAppDir). If empty, it isn't used for anything.

The length of AppId with all constants evaluated should never exceed 127 characters.
Example:

AppId=MyProgram
```

* Use DirName as AppId

Co-authored-by: Mustafa M <mus-m@outlook.com>

* remove unneeded code

Co-authored-by: Mustafa M <mus-m@outlook.com>
KristofferC pushed a commit that referenced this issue Mar 26, 2021
…40163)

* Have different Windows uninstall keys for different Julia versions

Should fix #40004.  Have the uninstall key to be "{#AppNameLong}_is1" where AppNameLong contains the Julia version to prevent Windows from overwriting the uninstall information for different Julia versions.

Inno Setup documentation about the AppId https://jrsoftware.org/ishelp/topic_setup_appid.htm copied here for convenience
```
[Setup]: AppId

Default value:

AppName
Description:

The value of AppId is stored inside uninstall log files (unins???.dat), and is checked by subsequent installations to determine whether it may append to a particular existing uninstall log. Setup will only append to an uninstall log if the AppId of the existing uninstall log is the same as the current installation's AppId. For a practical example, say you have two installations -- one entitled My Program and the other entitled My Program 1.1 Update. To get My Program 1.1 Update to append to My Program's uninstall log, you would have to set AppId to the same value in both installations.

AppId also determines the actual name of the Uninstall registry key, to which Inno Setup tacks on "_is1" at the end. (Therefore, if AppId is "MyProgram", the key will be named "MyProgram_is1".) Pre-1.3 versions of Inno Setup based the key name on the value of AppVerName.

AppId is a not used for display anywhere, so feel free to make it as cryptic as you desire. The value may include constants.

If you use a {code:..} constant to allow your user to customize AppId, you do not need to return the real value until just before the installation starts: if necessary you may return an empty or generic value at earlier times. If not empty, this value will only be used to attempt to restore previous install settings (like the settings stored by [Setup] section directive UsePreviousAppDir). If empty, it isn't used for anything.

The length of AppId with all constants evaluated should never exceed 127 characters.
Example:

AppId=MyProgram
```

* Use DirName as AppId

Co-authored-by: Mustafa M <mus-m@outlook.com>

* remove unneeded code

Co-authored-by: Mustafa M <mus-m@outlook.com>
(cherry picked from commit e2f5f26)
KristofferC pushed a commit that referenced this issue Apr 4, 2021
…40163)

* Have different Windows uninstall keys for different Julia versions

Should fix #40004.  Have the uninstall key to be "{#AppNameLong}_is1" where AppNameLong contains the Julia version to prevent Windows from overwriting the uninstall information for different Julia versions.

Inno Setup documentation about the AppId https://jrsoftware.org/ishelp/topic_setup_appid.htm copied here for convenience
```
[Setup]: AppId

Default value:

AppName
Description:

The value of AppId is stored inside uninstall log files (unins???.dat), and is checked by subsequent installations to determine whether it may append to a particular existing uninstall log. Setup will only append to an uninstall log if the AppId of the existing uninstall log is the same as the current installation's AppId. For a practical example, say you have two installations -- one entitled My Program and the other entitled My Program 1.1 Update. To get My Program 1.1 Update to append to My Program's uninstall log, you would have to set AppId to the same value in both installations.

AppId also determines the actual name of the Uninstall registry key, to which Inno Setup tacks on "_is1" at the end. (Therefore, if AppId is "MyProgram", the key will be named "MyProgram_is1".) Pre-1.3 versions of Inno Setup based the key name on the value of AppVerName.

AppId is a not used for display anywhere, so feel free to make it as cryptic as you desire. The value may include constants.

If you use a {code:..} constant to allow your user to customize AppId, you do not need to return the real value until just before the installation starts: if necessary you may return an empty or generic value at earlier times. If not empty, this value will only be used to attempt to restore previous install settings (like the settings stored by [Setup] section directive UsePreviousAppDir). If empty, it isn't used for anything.

The length of AppId with all constants evaluated should never exceed 127 characters.
Example:

AppId=MyProgram
```

* Use DirName as AppId

Co-authored-by: Mustafa M <mus-m@outlook.com>

* remove unneeded code

Co-authored-by: Mustafa M <mus-m@outlook.com>
(cherry picked from commit e2f5f26)
KristofferC pushed a commit that referenced this issue Apr 4, 2021
…40163)

* Have different Windows uninstall keys for different Julia versions

Should fix #40004.  Have the uninstall key to be "{#AppNameLong}_is1" where AppNameLong contains the Julia version to prevent Windows from overwriting the uninstall information for different Julia versions.

Inno Setup documentation about the AppId https://jrsoftware.org/ishelp/topic_setup_appid.htm copied here for convenience
```
[Setup]: AppId

Default value:

AppName
Description:

The value of AppId is stored inside uninstall log files (unins???.dat), and is checked by subsequent installations to determine whether it may append to a particular existing uninstall log. Setup will only append to an uninstall log if the AppId of the existing uninstall log is the same as the current installation's AppId. For a practical example, say you have two installations -- one entitled My Program and the other entitled My Program 1.1 Update. To get My Program 1.1 Update to append to My Program's uninstall log, you would have to set AppId to the same value in both installations.

AppId also determines the actual name of the Uninstall registry key, to which Inno Setup tacks on "_is1" at the end. (Therefore, if AppId is "MyProgram", the key will be named "MyProgram_is1".) Pre-1.3 versions of Inno Setup based the key name on the value of AppVerName.

AppId is a not used for display anywhere, so feel free to make it as cryptic as you desire. The value may include constants.

If you use a {code:..} constant to allow your user to customize AppId, you do not need to return the real value until just before the installation starts: if necessary you may return an empty or generic value at earlier times. If not empty, this value will only be used to attempt to restore previous install settings (like the settings stored by [Setup] section directive UsePreviousAppDir). If empty, it isn't used for anything.

The length of AppId with all constants evaluated should never exceed 127 characters.
Example:

AppId=MyProgram
```

* Use DirName as AppId

Co-authored-by: Mustafa M <mus-m@outlook.com>

* remove unneeded code

Co-authored-by: Mustafa M <mus-m@outlook.com>
(cherry picked from commit e2f5f26)
ElOceanografo pushed a commit to ElOceanografo/julia that referenced this issue May 4, 2021
…uliaLang#40163)

* Have different Windows uninstall keys for different Julia versions

Should fix JuliaLang#40004.  Have the uninstall key to be "{#AppNameLong}_is1" where AppNameLong contains the Julia version to prevent Windows from overwriting the uninstall information for different Julia versions.

Inno Setup documentation about the AppId https://jrsoftware.org/ishelp/topic_setup_appid.htm copied here for convenience
```
[Setup]: AppId

Default value:
	
AppName
Description:

The value of AppId is stored inside uninstall log files (unins???.dat), and is checked by subsequent installations to determine whether it may append to a particular existing uninstall log. Setup will only append to an uninstall log if the AppId of the existing uninstall log is the same as the current installation's AppId. For a practical example, say you have two installations -- one entitled My Program and the other entitled My Program 1.1 Update. To get My Program 1.1 Update to append to My Program's uninstall log, you would have to set AppId to the same value in both installations.

AppId also determines the actual name of the Uninstall registry key, to which Inno Setup tacks on "_is1" at the end. (Therefore, if AppId is "MyProgram", the key will be named "MyProgram_is1".) Pre-1.3 versions of Inno Setup based the key name on the value of AppVerName.

AppId is a not used for display anywhere, so feel free to make it as cryptic as you desire. The value may include constants.

If you use a {code:..} constant to allow your user to customize AppId, you do not need to return the real value until just before the installation starts: if necessary you may return an empty or generic value at earlier times. If not empty, this value will only be used to attempt to restore previous install settings (like the settings stored by [Setup] section directive UsePreviousAppDir). If empty, it isn't used for anything.

The length of AppId with all constants evaluated should never exceed 127 characters.
Example:

AppId=MyProgram
```

* Use DirName as AppId

Co-authored-by: Mustafa M <mus-m@outlook.com>

* remove unneeded code

Co-authored-by: Mustafa M <mus-m@outlook.com>
antoine-levitt pushed a commit to antoine-levitt/julia that referenced this issue May 9, 2021
…uliaLang#40163)

* Have different Windows uninstall keys for different Julia versions

Should fix JuliaLang#40004.  Have the uninstall key to be "{#AppNameLong}_is1" where AppNameLong contains the Julia version to prevent Windows from overwriting the uninstall information for different Julia versions.

Inno Setup documentation about the AppId https://jrsoftware.org/ishelp/topic_setup_appid.htm copied here for convenience
```
[Setup]: AppId

Default value:
	
AppName
Description:

The value of AppId is stored inside uninstall log files (unins???.dat), and is checked by subsequent installations to determine whether it may append to a particular existing uninstall log. Setup will only append to an uninstall log if the AppId of the existing uninstall log is the same as the current installation's AppId. For a practical example, say you have two installations -- one entitled My Program and the other entitled My Program 1.1 Update. To get My Program 1.1 Update to append to My Program's uninstall log, you would have to set AppId to the same value in both installations.

AppId also determines the actual name of the Uninstall registry key, to which Inno Setup tacks on "_is1" at the end. (Therefore, if AppId is "MyProgram", the key will be named "MyProgram_is1".) Pre-1.3 versions of Inno Setup based the key name on the value of AppVerName.

AppId is a not used for display anywhere, so feel free to make it as cryptic as you desire. The value may include constants.

If you use a {code:..} constant to allow your user to customize AppId, you do not need to return the real value until just before the installation starts: if necessary you may return an empty or generic value at earlier times. If not empty, this value will only be used to attempt to restore previous install settings (like the settings stored by [Setup] section directive UsePreviousAppDir). If empty, it isn't used for anything.

The length of AppId with all constants evaluated should never exceed 127 characters.
Example:

AppId=MyProgram
```

* Use DirName as AppId

Co-authored-by: Mustafa M <mus-m@outlook.com>

* remove unneeded code

Co-authored-by: Mustafa M <mus-m@outlook.com>
johanmon pushed a commit to johanmon/julia that referenced this issue Jul 5, 2021
…uliaLang#40163)

* Have different Windows uninstall keys for different Julia versions

Should fix JuliaLang#40004.  Have the uninstall key to be "{#AppNameLong}_is1" where AppNameLong contains the Julia version to prevent Windows from overwriting the uninstall information for different Julia versions.

Inno Setup documentation about the AppId https://jrsoftware.org/ishelp/topic_setup_appid.htm copied here for convenience
```
[Setup]: AppId

Default value:
	
AppName
Description:

The value of AppId is stored inside uninstall log files (unins???.dat), and is checked by subsequent installations to determine whether it may append to a particular existing uninstall log. Setup will only append to an uninstall log if the AppId of the existing uninstall log is the same as the current installation's AppId. For a practical example, say you have two installations -- one entitled My Program and the other entitled My Program 1.1 Update. To get My Program 1.1 Update to append to My Program's uninstall log, you would have to set AppId to the same value in both installations.

AppId also determines the actual name of the Uninstall registry key, to which Inno Setup tacks on "_is1" at the end. (Therefore, if AppId is "MyProgram", the key will be named "MyProgram_is1".) Pre-1.3 versions of Inno Setup based the key name on the value of AppVerName.

AppId is a not used for display anywhere, so feel free to make it as cryptic as you desire. The value may include constants.

If you use a {code:..} constant to allow your user to customize AppId, you do not need to return the real value until just before the installation starts: if necessary you may return an empty or generic value at earlier times. If not empty, this value will only be used to attempt to restore previous install settings (like the settings stored by [Setup] section directive UsePreviousAppDir). If empty, it isn't used for anything.

The length of AppId with all constants evaluated should never exceed 127 characters.
Example:

AppId=MyProgram
```

* Use DirName as AppId

Co-authored-by: Mustafa M <mus-m@outlook.com>

* remove unneeded code

Co-authored-by: Mustafa M <mus-m@outlook.com>
staticfloat pushed a commit that referenced this issue Dec 23, 2022
…40163)

* Have different Windows uninstall keys for different Julia versions

Should fix #40004.  Have the uninstall key to be "{#AppNameLong}_is1" where AppNameLong contains the Julia version to prevent Windows from overwriting the uninstall information for different Julia versions.

Inno Setup documentation about the AppId https://jrsoftware.org/ishelp/topic_setup_appid.htm copied here for convenience
```
[Setup]: AppId

Default value:

AppName
Description:

The value of AppId is stored inside uninstall log files (unins???.dat), and is checked by subsequent installations to determine whether it may append to a particular existing uninstall log. Setup will only append to an uninstall log if the AppId of the existing uninstall log is the same as the current installation's AppId. For a practical example, say you have two installations -- one entitled My Program and the other entitled My Program 1.1 Update. To get My Program 1.1 Update to append to My Program's uninstall log, you would have to set AppId to the same value in both installations.

AppId also determines the actual name of the Uninstall registry key, to which Inno Setup tacks on "_is1" at the end. (Therefore, if AppId is "MyProgram", the key will be named "MyProgram_is1".) Pre-1.3 versions of Inno Setup based the key name on the value of AppVerName.

AppId is a not used for display anywhere, so feel free to make it as cryptic as you desire. The value may include constants.

If you use a {code:..} constant to allow your user to customize AppId, you do not need to return the real value until just before the installation starts: if necessary you may return an empty or generic value at earlier times. If not empty, this value will only be used to attempt to restore previous install settings (like the settings stored by [Setup] section directive UsePreviousAppDir). If empty, it isn't used for anything.

The length of AppId with all constants evaluated should never exceed 127 characters.
Example:

AppId=MyProgram
```

* Use DirName as AppId

Co-authored-by: Mustafa M <mus-m@outlook.com>

* remove unneeded code

Co-authored-by: Mustafa M <mus-m@outlook.com>
(cherry picked from commit e2f5f26)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging a pull request may close this issue.

4 participants