Roco 0.2.0
Roco 0.2.0 focuses on reliable Windows sign-in startup, safe Explorer integration, and direct in-place upgrades. It resolves the Explorer lifecycle and login issues reported against 0.1.0 while preserving the same copy-and-paste workflow and Robocopy transfer path.
Upgrade
Starting with version 0.2.0, upgrading uses the same command as a clean installation:
- Download and extract every file from
roco-0.2.0-windows-x64.zipinto one directory. - Open PowerShell in that directory.
- Run:
.\roco.exe install --startThere is no need to run roco stop or roco uninstall first. The installer stops the active daemon, replaces the installed files, switches Explorer to the new Agent, and starts the upgraded version automatically.
Changes and fixes
Silent and reliable sign-in startup
- Added the dedicated
roco-daemon.exeGUI-subsystem launcher. - The sign-in
Runentry now starts the launcher instead of openingroco.exein a visible console window. - The launcher uses
CREATE_NO_WINDOW, redirects standard handles, waits for real daemon readiness, and retries bounded startup failures. - Added the
Local\Roco.Ready.v1readiness event.roco startandroco statusnow distinguish a process that merely exists from an Agent that has successfully attached to Explorer. - Explorer Agent activation timeouts are retained and retried instead of being incorrectly reported as ready.
Explorer Agent lifetime and shutdown safety
- Fixed an Explorer use-after-unload failure where patched callbacks could still point into
roco_explorer_agent.dllafter the DLL had been unloaded. - The Agent now acquires a counted self-reference before installing window subclasses or
IFileOperationvtable hooks. - Normal shutdown is ordered: disable interception and restore vtables, remove thread hooks, remove subclasses, drain active callbacks, then release the DLL from a dedicated thread.
- Vtable slots are restored only when they still point to Roco, preserving any later third-party hook.
- If Explorer cleanup cannot be completed safely, the Agent remains mapped and inert instead of risking an Explorer crash.
- Unexpected daemon termination now causes IPC requests to fall back to Explorer's saved implementation.
- Eliminated the associated Explorer crash, transient shutdown error dialog, desktop flash, and uninstall-time Explorer termination behavior.
Automatic in-place upgrades
- Added content-addressed installed Agent names such as
roco_explorer_agent-<fingerprint>.dll. - Added the atomically replaced
roco-agent.currentpointer usingMoveFileExWwith replace and write-through semantics. - An older Agent DLL still mapped by Explorer is no longer overwritten, eliminating Windows sharing violation errors 32 and 33 during upgrades.
- Stale managed Agent DLLs are removed automatically after they unlock or on a later start.
- Installed
roco.exeandroco-daemon.exereplacement now retries transient sharing violations for up to ten seconds. - Added a locked-Agent regression test that verifies side-by-side upgrade succeeds without uninstalling the previous version.
Sign-in black-screen fix
- Corrected Explorer window classification that previously treated every top-level
WorkerWas the desktop. - Generic
WorkerWwindows used by the taskbar, tray, input system, and other Shell workers are no longer injected. - Desktop injection is now limited to the
ProgmanorWorkerWwindow that actually hostsSHELLDLL_DefView. - Folder integration remains attached on demand only to verified
CabinetWClassthreads inexplorer.exe. - This removes the burst of cross-thread hooks that briefly blocked Shell painting during login.
Activity window behavior
- The copy activity window now enters the topmost band before every operation, including the first operation after installation or reboot.
- It remains topmost and draggable for the complete transfer lifetime and is hidden immediately when the task finishes.
- Hiding or completing a task removes the inactive window from the topmost band.
Documentation and release metadata
- Rewrote
docs/architecture.mdto document the complete process model, interception paths, Agent IPC, Robocopy pipeline, fallback rules, rendering model, ordered shutdown, upgrades, and failure boundaries. - Added explicit English and Simplified Chinese upgrade instructions to the README files.
- Updated the CLI, Explorer Agent crate, Cargo lockfile, and Windows manifest to version 0.2.0.
Verification
- 19 workspace tests passed, including real Robocopy copy/move smoke tests and the locked-Agent upgrade regression test.
cargo fmt --all --checkpassed.cargo clippy --workspace --all-targets -- -D warningspassed.cargo build --workspace --releasepassed.- The release executable reports
roco 0.2.0.
Package checksum
SHA256 90970DF759267D0E3CE022F21C88F5594886E9E68874A2B45807B25CC9311F6E roco-0.2.0-windows-x64.zip
Full changelog: v0.1.0...v0.2.0