Replace GVFS.Service with logon task and file-based repo registry#2020
Draft
tyrielv wants to merge 1 commit into
Draft
Replace GVFS.Service with logon task and file-based repo registry#2020tyrielv wants to merge 1 commit into
tyrielv wants to merge 1 commit into
Conversation
6714021 to
38798d2
Compare
68f0326 to
141d39a
Compare
Replace the GVFS.Service Windows service with a simpler architecture: Infrastructure: - LocalRepoRegistry: file-based repo tracking, wire-compatible with old service format. SYSTEM uses ProgramData; per-user uses platform default. Seed-on-first-use copies accessible entries from system registry. - LogonTaskRegistration: machine-wide \GVFS\AutoMount task fires for all interactive users (GroupId S-1-5-4) at logon, runs gvfs service --mount-all. Each user's repos loaded from their own LocalRepoRegistry. - ProjFS boot task: enable-projfs-on-all-drives.ps1 enables ProjFS and attaches PrjFlt on all volumes. Embedded in task XML via build-task-xml.ps1 with SHA-256 hash marker for drift detection. - CLI verb fallbacks: mount/unmount/service verbs fall back to LocalRepoRegistry when the service named pipe is unavailable. - GVFSVerb: silent-success fallback for PrjFlt FilterAttach. - InProcessMount: restore exception safety net in HandleRequest. Installer: - Stop and delete GVFS.Service on upgrade from older versions. - Register \GVFS\AutoMount logon task. - Remove service deployment, install, start from [Files]/[Run]. - Remove PendingUpgrade staging logic and ShowMountChoiceDialog. - Exclude GVFS.Service.exe from payload (layout.bat). Functional tests: - Remove service install/uninstall (no service to test against). - Settings.cs auto-detects user-mode gvfs at %LocalAppData%\VFSForGit\Current. 926 unit tests pass. Assisted-by: Claude Sonnet 4.5 Assisted-by: Claude Opus 4.6 Signed-off-by: Tyrie Vella <tyrielv@gmail.com>
b5ae764 to
ac437f2
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Background
One obstacle to automatically updating GVFS is that is requires administrator privileges to install and run.
Currently, GVFS.Service runs as a Windows Service under SYSTEM (high-privilege) account. That means every upgrade has to update the service, because it is a binary that changes in every release, so every upgrade needs administrator privileges.
The service itself currently performs these functions:
gvfs mountand "gvfs unmount" by sending messages on a named pipe to the service from the user-initiated gvfs.exe calls.gvfs serviceverb. These don't change the registry, but read it and perform the given operation.Of these functions, only the ProjFS enable/attach and the PendingUpgrade feature require elevated privileges.
Changes
This pull request removes GVFS.Service entirely, replacing it with:
gvfs service --mount-all(each user's LocalRepoRegistry)gvfs mountcan also trigger it if needed, for example if a new volume was created during the current user session.Open Item
Pending Upgrade functionality is broken, but will be replaced by #2028.