Skip to content

WinGet 1.29.360: directory handle sharing conflict causes Velopack installer to fail in set_current_dir #6527

Description

@flowersauce

Brief description

Installing Flori Input 1.4.0 (Flowersauce.FSClicker) with WinGet 1.29.360 fails with installer exit code 1. Running the exact same cached installer directly from a normal, non-elevated PowerShell terminal with --silent succeeds.

A Process Monitor capture shows a directory sharing conflict between winget.exe and the Velopack setup process. This may be related to #6520, but the failure stage is different: here the installer starts successfully and fails when changing its working directory. I have not tested an older WinGet version, so I cannot independently confirm a regression window.

Steps to reproduce

From a non-elevated PowerShell terminal:

winget install --id Flowersauce.FSClicker --exact --source winget

To obtain the installer error:

winget install --id Flowersauce.FSClicker --exact --source winget --override "--silent --verbose --log $env:TEMP\Flori-Input-winget.log"

Both fail with exit code 1 on this machine. Directly invoking the same cached EXE succeeds:

& "$env:LOCALAPPDATA\Temp\WinGet\Flowersauce.FSClicker.1.4.0\Flori-Input-v1.4.0-windows-x64-setup.exe" --silent

Direct invocation with --silent --verbose --log ... also succeeds and its log ends with Installation completed successfully!.

Expected behavior

WinGet should be able to launch the installer without a directory handle sharing conflict preventing installer initialization.

Actual behavior and installer log

WinGet verifies the cached installer hash, launches it, then reports exit code 1. Velopack 0.0.1298 logs:

Starting Velopack Setup (0.0.1298)
Silent: true
Verbose: true
Install To: None
[ERROR] An error has occurred: 另一个程序正在使用此文件,进程无法访问。 (os error 32)

The error means "The process cannot access the file because it is being used by another process."

Process Monitor evidence

All events below refer to this directory (user-specific path normalized):

%LOCALAPPDATA%\Temp\WinGet\Flowersauce.FSClicker.1.4.0
Time Process / PID Operation Result Relevant details
14:18:22.4102586 winget.exe / 22116 CreateFile SUCCESS Desired Access: Read Data/List Directory, Read Attributes, Delete, Synchronize; Disposition: Open; Options: Synchronous IO Non-Alert, Open Reparse Point; ShareMode: Read, Write
14:18:22.7400075 Flori-Input-v1.4.0-windows-x64-setup.exe / 11164 CreateFile SHARING VIOLATION Desired Access: Execute/Traverse, Synchronize; Disposition: Open; Options: Directory, Synchronous IO Non-Alert; ShareMode: Read, Write
14:18:22.7433306 winget.exe / 22116 CloseFile SUCCESS Directory handle closed after installer failure

Interpretation: WinGet holds a directory handle with DELETE access. The installer's directory open does not include FILE_SHARE_DELETE, which conflicts with that existing access. Direct invocation after WinGet exits no longer encounters this conflict.

The failure location matches Velopack's startup code: immediately after logging Install To, it calls env::set_current_dir(containing_dir)?. The failing log never reaches the subsequent OS information message:

https://github.com/velopack/velopack/blob/0.0.1298/src/bins/src/setup.rs#L85-L97

The same directory-change call remains in Velopack 1.2.0, but I have not repackaged or tested that version:

https://github.com/velopack/velopack/blob/1.2.0/src/bins/src/setup.rs#L124-L132

Environment

  • WinGet: 1.29.360
  • Windows: Windows 11 Enterprise, 10.0.26200.9445, x64
  • Package: Flowersauce.FSClicker 1.4.0 (Flori Input)
  • Installer: Velopack 0.0.1298, per-user installation
  • WinGet and direct installer invocation use normal user permissions; only ProcMon was elevated for capture.
  • Microsoft.VCRedist.2015+.x64 14.51.36247.0 is already installed and recognized by winget list --id Microsoft.VCRedist.2015+.x64 --exact.

Could you investigate whether WinGet needs to retain DELETE access on the installer directory while the child installer runs, or whether there is a supported compatibility approach for installers that set their working directory to that location?

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    Command-InstallIssue related to WinGet InstallIssue-BugIt either shouldn't be doing this or needs an investigation.

    Type

    Projects

    No projects

      Milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions