[Picture 1] The
update dialog appears on every launch when a newer version is available.
[Picture 2] The
updater downloads the installer in the background before failing due to missing
admin rights.
Method Overview
|
Method |
Status |
Description |
|
WinSparkle DLL stub |
Current |
Replaces WinSparkle.dll
with a stub to fully disable update checks |
|
Update Dialog Closer |
Legacy |
PowerShell script that
closes update dialogs reactively |
Previous Approach (Legacy)
An earlier
workaround using a PowerShell script to reactively close the update dialog is
documented in this blog post and is kept in the repository under
legacy/update-dialog-closer/ for reference. It works, but the
updater itself remains active and the dialog can reappear. The stub method
below is cleaner and fully eliminates the problem.
Recommended Method:
WinSparkle DLL Stub
The
reMarkable application loads WinSparkle.dll
to handle its update logic. By replacing this DLL with a stub that exports all
the expected functions but does nothing, the update mechanism is disabled at
the source. The application loads normally, the update check is never
initiated, and no dialog ever appears.
The exported functions were identified by inspecting the original DLL using CFF Explorer:
[Picture 3] CFF
Explorer showing the Export Directory of the original WinSparkle.dll. All
listed functions are implemented as no-ops in the stub.
The stub
DLL exports the complete WinSparkle API so the application does not crash on
load. All functions are present but perform no actions.
Effect
• Update
checks are disabled entirely
• No update dialogs are ever shown to
the user
• The
application continues functioning normally
Applicability
This method
is not specific to reMarkable. Any Windows application that uses WinSparkle for
updates and loads WinSparkle.dll dynamically can have its updater
disabled using the same stub, as long as the application does not verify the
DLL signature. The exported function names can be verified with CFF Explorer as
shown above.
Quick Usage
Install the
reMarkable Companion App normally, then replace:
|
C:\Program
Files\reMarkable\WinSparkle.dll |
...with the
stub DLL from bin/WinSparkle.dll in the repository.
Build Script:
Build-reMarkable-NoAutoUpdate.ps1
For
production use, compiling the stub yourself is recommended over using the
precompiled binary. The included PowerShell build script automates the
full process:
1. Resolves the latest reMarkable
installer URL from winget-pkgs (with fallbacks)
2. Resolves the latest MinGW compiler
build from GitHub releases
3. Downloads 7-Zip if needed, extracts
MinGW
4. Compiles the stub DLL from the
included C source file
5. Installs
reMarkable silently
6. Backs up the original WinSparkle.dll
and replaces it with the stub
Run as
Administrator in a test VM or packaging environment:
|
.\Build-reMarkable-NoAutoUpdate.ps1 |
Repeated
runs are handled gracefully — downloads are skipped if the file already matches
the expected URL and size.
Enterprise Deployment
7. Install the reMarkable Companion App
silently (via PSADT or similar)
8. Replace WinSparkle.dll with the stub version
9. Deliver subsequent updates through
your software distribution platform
Integrates
cleanly with Omnissa Workspace ONE UEM, App Volumes, PSADT, and MSI repackaging
pipelines.
Repository
https://github.com/altiris4ever/Remarkable-Update-Closer/
References
• WinSparkle registry settings
• reMarkable Companion App winget manifest
• Previous blog post:
Update Dialog Closer (legacy method)
• Legacy scripts in repository



No comments:
Post a Comment