Commit Graph

294 Commits

Author SHA1 Message Date
Jyrki Gadinger
0259ff4568 fix(msi): ensure the same ProductCode is used for embedded transforms
Using `"*"` will result in a different GUID with each invocation of the
linker (`light.exe`), which can break automated installations when a
localised version of the installer was loaded.

Signed-off-by: Jyrki Gadinger <nilsding@nilsding.org>
2025-08-21 10:58:49 +02:00
Jyrki Gadinger
55b09b00c1 fix(msi): display external version string in installer
e.g. 3.16.82 -> "3.17.0-rc2"; non-rc/daily builds will still read
"3.17.0"

Signed-off-by: Jyrki Gadinger <nilsding@nilsding.org>
2025-08-06 12:14:23 +02:00
Jyrki Gadinger
49e88d6eac fix(msi): set the REBOOT property in the MSI
A value of `ReallySuppress` will not display a reboot prompt whenever
the `ForceReboot` action was run, or whenever a reboot was scheduled
(e.g. by `FilesInUse`).  Apparently this will not reboot the machine on
its own either.

`winget` sets this property in its manifest[0], and according to reports in
issue #5369 this seems to work.

See also: https://learn.microsoft.com/en-us/windows/win32/msi/reboot

[0]: 0b40904d14/manifests/n/Nextcloud/NextcloudDesktop/3.16.5/Nextcloud.NextcloudDesktop.installer.yaml (L16)

Signed-off-by: Jyrki Gadinger <nilsding@nilsding.org>
2025-06-04 10:20:15 +02:00
Jyrki Gadinger
d28b8e325d
feat(msi): do not schedule reboots ourselves
let's have the MSI RestartManager take care of that

Signed-off-by: Jyrki Gadinger <nilsding@nilsding.org>
2025-05-13 17:21:01 +02:00
Jyrki Gadinger
59f3e774ad
fix(msi): force termination of stuck processes
Stopping the Windows Explorer process does not always work.  Per default
the MSI Restart Manager will display a warning message after a timeout,
and not attempt to restart Explorer afterwards -- resulting in a black
screen if no other window is open.

Setting the property `MSIRMSHUTDOWN` to `1` will force the termination
of the process when the timeout is reached, which finally allows the
Explorer to be restarted.

Signed-off-by: Jyrki Gadinger <nilsding@nilsding.org>
2025-05-13 17:18:40 +02:00
Jyrki Gadinger
532c5dfdeb
fix(msi): do not completely remove the previous installation when updating
The MSIs we distribute perform so-called "major upgrades".

From the Microsoft docs, we learn that...

> A typical major upgrade **removes a previous version** of an
> application and installs a new version.

Indeed that was the case -- the previous version is uninstalled
completely before the new version gets installed.  Since we install an
extension that's loaded by explorer, the installer will ask the user to
restart Windows Explorer during the uninstallation of the previous
version (and restarting that might not always work as expected).

There is a way to change this behaviour though, using Wix3's
`MajorUpgrade` element.  Through its `Schedule` property it's possible
to define when the removal of the previous version should occur.

The previous value `afterInstallInitialize` is one of two values that
perform a complete uninstall/install sequence.  The new value
`afterInstallExecute` will install new files on top of the previous
installation (depending on the `REINSTALLMODE` I guess) and remove
older files that are not present.
In the case of the extensions this means that the .dlls from the
previous installation will not be touched, as long as the version
embedded in the DLL info didn't change.  This results in the installer
no longer requesting Windows Explorer to restart, which is a big plus :D

I also changed the REINSTALLMODE to `dmus` to allow downgrades as well.

With this change, the request to restart Windows Explorer should
hopefully happen only once an installation was made using an MSI that
contains this change.  Further updates will only request a restart if
the DLL version of these extensions change...

See also:
  - https://learn.microsoft.com/en-us/windows/win32/msi/major-upgrades
  - https://docs.firegiant.com/wix/schema/wxs/majorupgrade/#attributes:~:text=Schedule

Signed-off-by: Jyrki Gadinger <nilsding@nilsding.org>
2025-05-13 17:18:40 +02:00
Matthieu Gallien
a73733b146
fix(msi): use standard replace mode for MSI installer
shoudl enable replacing files during install happen only when needed
instead of always

will need to take care of migration from older releases

Signed-off-by: Matthieu Gallien <matthieu.gallien@nextcloud.com>
Signed-off-by: Jyrki Gadinger <nilsding@nilsding.org>
2025-05-13 17:18:39 +02:00
Andy Scherzinger
5fe94ea149 docs(reuse): Migrate to SPDX header
Signed-off-by: Andy Scherzinger <info@andy-scherzinger.de>
2025-05-07 09:28:53 +02:00
Andy Scherzinger
49038ade94
docs(reuse): Migrate to SPDX header
Signed-off-by: Andy Scherzinger <info@andy-scherzinger.de>
2025-04-25 17:27:21 +02:00
Andy Scherzinger
00994aa9e8
docs(reuse): Migrate to SPDX header
Signed-off-by: Andy Scherzinger <info@andy-scherzinger.de>
2025-04-16 15:19:26 +02:00
Jyrki Gadinger
88d62aed40 fix(msi): allow custom installation directory
Signed-off-by: Jyrki Gadinger <nilsding@nilsding.org>
2025-04-15 16:18:52 +02:00
Jyrki Gadinger
a6a17e324a feat: build installer with translations for DE, FR, IT, ES
building all the translated installers takes about ~1 minute each, so
keep that in mind when adding extra translations ...

Signed-off-by: Jyrki Gadinger <nilsding@nilsding.org>
2025-04-04 11:33:20 +02:00
Jyrki Gadinger
d2474d9f45 feat: build translated MSI installer
the base translations come from WixUI itself

There are still some untranslated strings in Nextcloud.wxs, we need to
take care of them at a later point.  As a first step this is good
enough.

This commit serves as a proof-of-concept, the languages I used here will
change depending on what we want to support.

Signed-off-by: Jyrki Gadinger <nilsding@nilsding.org>
2025-04-04 11:33:20 +02:00
Matthieu Gallien
22e5644bf9 remove obsolete not working docker image for windows compilation
that image was supposed to be usable for cross compilation from Linux to
build a Windows release

probably never worked

not working anymore but creating confusion

Signed-off-by: Matthieu Gallien <matthieu.gallien@nextcloud.com>
2024-09-26 12:01:30 +02:00
Matthieu Gallien
06c2fecbe1 create registry keys needed for edit locally in local machine category
creating the registry keys via installer for the current user is not
enough to have the feature enabled for all user accounts on a given
machine

Signed-off-by: Matthieu Gallien <matthieu.gallien@nextcloud.com>
2024-04-23 13:48:14 +02:00
Matthieu Gallien
ba78942209 Revert "Allow installation to close shell extension DLLs via the custom action. Disable reboot prompt in case of the version with this change was previously already installed."
Close #6566

This reverts commit c1719bc817.
2024-03-27 09:56:45 +01:00
alex-z
c1719bc817 Allow installation to close shell extension DLLs via the custom action. Disable reboot prompt in case of the version with this change was previously already installed.
Signed-off-by: alex-z <blackslayer4@gmail.com>
2024-03-19 13:56:07 +01:00
Dimitri Papadopoulos
09521edbac Fix residual typos found by codespell
Signed-off-by: Dimitri Papadopoulos <3234522+DimitriPapadopoulos@users.noreply.github.com>
2023-09-16 20:36:56 +02:00
Matthieu Gallien
722faf7bcf
force MSI package to install all files
Signed-off-by: Matthieu Gallien <matthieu.gallien@nextcloud.com>
2023-07-25 21:43:04 +02:00
Matthieu Gallien
1ae9094d8e update docker container based on opensuse leap to cross build to windows
Signed-off-by: Matthieu Gallien <matthieu.gallien@nextcloud.com>
2023-06-21 08:50:52 +02:00
alex-z
7f6c2f946b Move Windows shell extension DLLs to a root installation directory.
Signed-off-by: alex-z <blackslayer4@gmail.com>
2022-12-29 17:59:21 +01:00
allexzander
289a641d74 VFS Windows: Display the sharing state and lock state in the 'Status' column of Windows Explorer
Signed-off-by: allexzander <blackslayer4@gmail.com>
2022-10-04 18:32:51 +02:00
alex-z
d42d3c057f Implement URI handler for local file editing
Signed-off-by: alex-z <blackslayer4@gmail.com>
2022-08-03 11:38:33 +03:00
allexzander
250faf027f Do not reboot PC when running an MSI via autoupdate.
Signed-off-by: allexzander <blackslayer4@gmail.com>
2022-08-02 09:26:17 +03:00
alex-z
001deace2d Implement COM Dll for CfApi shell extensins. Implement Thumbnail Provider.
Signed-off-by: alex-z <blackslayer4@gmail.com>
2022-07-29 19:26:53 +03:00
alex-z
e40142847b Add and use DO_NOT_REBOOT_IN_SILENT=1 parameter for MSI to not reboot automatically when running from the updater.
Signed-off-by: alex-z <blackslayer4@gmail.com>
2022-05-19 12:52:40 +03:00
Matthieu Gallien
75bcc9a24e require cmake 3.16
close #3572

Signed-off-by: Matthieu Gallien <matthieu.gallien@nextcloud.com>
2022-03-09 13:07:48 +00:00
alex-z
237e5a942f Windows. MSI. Unregister Nextcloud folders in SyncRootManager on uninstall.
Signed-off-by: alex-z <blackslayer4@gmail.com>
2022-01-07 17:02:32 +00:00
Felix Weilbach
7094d699e9 Allow installation on Windows version < 1709
Signed-off-by: Felix Weilbach <felix.weilbach@nextcloud.com>
2021-07-08 08:11:17 +00:00
Matthieu Gallien
8ad6f89fed bring back dynamic load of VFS plugins
Signed-off-by: Matthieu Gallien <matthieu.gallien@nextcloud.com>
2021-07-08 08:11:17 +00:00
allexzander
860514f01b Run legacy uninstall exe in a secure way.
Signed-off-by: allexzander <blackslayer4@gmail.com>
2021-06-30 11:58:13 +00:00
allexzander
c88e76a4a9 Minimum supported Windows 10, build 1709.
Signed-off-by: allexzander <blackslayer4@gmail.com>
2021-04-15 13:47:37 +03:00
allexzander
7d2ab1f3fe Do not schedule reboot when installing MSI in silent mode unless 'SCHEDULE_REBOOT' is set.
Signed-off-by: allexzander <blackslayer4@gmail.com>
2021-04-14 06:59:21 +00:00
Kevin Ottens
576a25161b Integrate the version suffix to the MSI filename
This should be enough to reinstate the "-daily" marker in the filename
for daily builds.

Signed-off-by: Kevin Ottens <kevin.ottens@nextcloud.com>
2021-01-14 19:24:42 +00:00
Christian Kamm
7dc65b060d
NSIS: Register placeholder extension
Also change the placeholder suffix config option to not include the dot,
the dotless form is needed in the nsis script.
2020-12-15 10:57:50 +01:00
Michael Schuster
61dc4b9137
Update comments
Everyone uses their private mail, so ensure people can get in touch.

Signed-off-by: Michael Schuster <michael@schuster.ms>
2020-10-15 02:18:52 +02:00
Michael Schuster
ce279d0bbd Windows MSI: Add SKIPAUTOUPDATE property for the skipUpdateCheck setting
Signed-off-by: Michael Schuster <michael@schuster.ms>
2020-10-05 07:18:35 +00:00
Michael Schuster
2476dcb425 Windows MSI: Stay compatible with the upstream "StartMenuShortcuts" feature
Even though we only create a program shortcut in the Start Menu, try to make administrators lives easier by not diverging feature and option naming.

Signed-off-by: Michael Schuster <michael@schuster.ms>
2020-10-05 07:18:35 +00:00
Michael Schuster
e024aa3f16
Windows: Win32 migration tools code review
Signed-off-by: Michael Schuster <michael@schuster.ms>
2020-09-21 16:40:19 +02:00
Michael Schuster
a9014f9852
Windows MSI: Add MSI scripts and UI resources
Uses CMake to generate and install all required files in the "msi/" directory.

Signed-off-by: Michael Schuster <michael@schuster.ms>
2020-09-21 16:40:19 +02:00
Michael Schuster
f321cd8ae6
Windows: Add Win32 stand-alone migration tool NCNavRemove
Removes all Explorer Navigation Pane entries for a given ApplicationName, specified in NavRemove.ini in the working directory.

Also compiles a DLL with the same behaviour that exports:
- RemoveNavigationPaneEntries

Both tool variants are Mutex-protected.

Statically linked, optimized for binary size, no Qt dependencies.

Signed-off-by: Michael Schuster <michael@schuster.ms>
2020-09-21 16:40:19 +02:00
Michael Schuster
68776fe319
Windows MSI: Add helper DLL and shared migration tools code
The helper DLL will be utilized by Windows Installer with Custom Actions defined in the NCMsiHelper.wxs WiX fragment.

Exports:
- ExecNsisUninstaller
- RemoveNavigationPaneEntries

Signed-off-by: Michael Schuster <michael@schuster.ms>
2020-09-21 16:40:19 +02:00
Michael Schuster
0e1e3a29ce Windows: Remove unused and outdated NSIS Transifex settings
The last translation update from Transifex was done in 2017, so the scripts and settings were never used for Nextcloud.

This commit removes the unused scripts and "Auto-generated" comments in the translation files.

Some files have been modified over time either way and MSI will replace NSIS soon.

Signed-off-by: Michael Schuster <michael@schuster.ms>
2020-09-16 05:41:27 +00:00
Michael Schuster
7f5b7f637c Windows: Fix NSIS language encoding (use UTF-8 instead of Win code pages)
The old conversion to specific code pages caused display errors (see issue #2393 for Russian).

Based on bin/l10n.sh, the files in this commit were converted to UTF-8 using iconv with the following parameters:

  iconv -f CP1252 -t UTF-8 -o German.nsh German.nsh
  iconv -f CP1252 -t UTF-8 -o Galician.nsh Galician.nsh
  iconv -f CP1253 -t UTF-8 -o Greek.nsh Greek.nsh
  iconv -f CP1250 -t UTF-8 -o Slovenian.nsh Slovenian.nsh
  iconv -f CP1257 -t UTF-8 -o Estonian.nsh Estonian.nsh
  iconv -f CP1252 -t UTF-8 -o Italian.nsh Italian.nsh
  iconv -f CP1252 -t UTF-8 -o PortugueseBR.nsh PortugueseBR.nsh
  iconv -f CP1252 -t UTF-8 -o Spanish.nsh Spanish.nsh
  iconv -f CP1252 -t UTF-8 -o Dutch.nsh Dutch.nsh
  iconv -f CP1252 -t UTF-8 -o Finnish.nsh Finnish.nsh
  iconv -f CP932 -t UTF-8 -o Japanese.nsh Japanese.nsh
  iconv -f CP1250 -t UTF-8 -o Slovak.nsh Slovak.nsh
  iconv -f CP1254 -t UTF-8 -o Turkish.nsh Turkish.nsh
  iconv -f CP1252 -t UTF-8 -o Norwegian.nsh Norwegian.nsh
  iconv -f CP852  -t UTF-8 -o Czech.nsh Czech.nsh

The installer script nextcloud.nsi in the client-building repo needs the following line (to be added on top):
  Unicode true

Signed-off-by: Michael Schuster <michael@schuster.ms>
2020-09-16 05:41:27 +00:00
Valdnet
a432501d80 l10n: Add a period 2020-09-09 10:07:10 +02:00
Valdnet
9822079cae l10n: Extract the button name 2020-09-08 16:44:51 +02:00
Valdnet
528fa92e86 l10n: Delete unnecessary sentence 2020-09-08 16:44:51 +02:00
Valdnet
1444500f77 l10n: A few more fixes 2020-09-08 16:44:51 +02:00
Valdnet
e2737b5067 l10n: Word correction 2020-09-08 16:44:51 +02:00
Valdnet
f931bc832c l10n: Corrected translation 2020-09-08 16:44:51 +02:00