Skip to content

4.7 takes several minutes to launch on windows unless run as admin #120649

Closed

Description

@dukeman74

Editing this because I have more clarity into the actual issue

Seems that when launching, godot editor tries to stat all drives, twice. This check https://learn.microsoft.com/en-us/windows/win32/api/fileapi/nf-fileapi-getvolumeinformationw seems to hang for about 8 seconds before giving up (per drive, x2 per launch)
In my case I believe this was because I had a VPN that enabled connectivity of those network drives, but it was only letting godot use the VPN when I ran as administrator, or possibly true access to the network drive was being restricted in another way that admin bypassed.

Tested versions

  • reproducible in 4.7 4.7-beta1 4.7-dev5 4.7-dev4
  • not reproducible in 4.7-dev3 4.7-dev1 4.6.3, 4.6.2, 4.6.1, 4.4

System information

Godot v4.7.stable - Windows 11 (build 26200) - Multi-window, 2 monitors - Direct3D 12 (Forward+) - dedicated Intel(R) Iris(R) Xe Graphics (Intel Corporation; 32.0.101.7084) - 13th Gen Intel(R) Core(TM) i7-1370P (20 threads) - 31.66 GiB memory - WASAPI (48000 Hz, Stereo/mono)

I also tried compatibility rendering and that did not change the behavior

Issue description

when running the editor, it opens and then after about 1 seconds, which normally is when it is done loading and shows the project list, instead shows the "not responding" white bar at the top
about 20 seconds later, it will finally load, but it will have an error about fetching the update in red. Error 13.

When opening any project, including creating a blank one. it will hang for 2-5 minutes before showing something other than the splash screen, and then it works fine.

running as administrator does not exhibit any of these problems.

I am worried this has to do with AV or other IT restrictions, but there is a clear difference in behavior between builds

Steps to reproduce

run Godot_v4.7-_win64.exe on a windows 11 system that is behaving like mine is.

If anyone has a suggestion of additional information I could collect or things to try, please let me know.

Minimal reproduction project (MRP)

This is project agnostic

Activity

  1. dukeman74 commented on Jun 25, 2026

    @dukeman74
    Author

    Bisecting now
    It does take a very long time for me to compile unfortunately
    to start
    good 60fff00
    bad 755fa44

    trying to build bbf8e26 fails because
    In file included from platform/windows/tts_windows.cpp:36:
    platform/windows/tts_driver_onecore.h:43:10: fatal error: winrt/Windows.Foundation.Collections.h: No such file or directory
    43 | #include <winrt/Windows.Foundation.Collections.h>
    | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    compilation terminated.

    are all commits supposed to be buildable? what do I do about this?

    Looks like 'git bisect skip' is what I do about that

    git bisect start
    # status: waiting for both good and bad commits
    # good: [60fff00a660a2aeb03f88c07fb7baed353bcb72f] Merge pull request #117820 from akien-mga/ios-include-thread_safe
    git bisect good 60fff00a660a2aeb03f88c07fb7baed353bcb72f
    # status: waiting for bad commit, 1 good commit known
    # bad: [755fa449c4aa94fdf2c58e2b726fd62efde07e09] Merge pull request #118318 from clayjohn/compatibility-sky-shader-error
    git bisect bad 755fa449c4aa94fdf2c58e2b726fd62efde07e09
    # skip: [bbf8e2653cac044f85b3bb41508073be13f78732] Merge pull request #117998 from KoBeWi/rework_to_make_work
    git bisect skip bbf8e2653cac044f85b3bb41508073be13f78732
    # skip: [0eee380851871f43c313342319617aa083b5d790] Merge pull request #117968 from sorascode/commit-amends
    git bisect skip 0eee380851871f43c313342319617aa083b5d790
    # skip: [039d474aa761a26f2b7d58474375ee855caae312] Add tests for Container nodes
    git bisect skip 039d474aa761a26f2b7d58474375ee855caae312
    # bad: [623f64d3104318bae3e2fa4acb46a828076054a5] Merge pull request #118208 from RgeditV1/fix-copy-remote-path
    git bisect bad 623f64d3104318bae3e2fa4acb46a828076054a5
    # skip: [8c3a9f9afce2d3d24cf5dfa20f93fb6dacf13075] Merge pull request #105122 from Calinou/canvasitem-drawing-antialiasing-compensate-width
    git bisect skip 8c3a9f9afce2d3d24cf5dfa20f93fb6dacf13075
    # good: [7e1c6ce8f0b0bf1c84b5cc339cb5afac582eeff8] Fix "Pack Project as Zip" not saving permissions and time.
    git bisect good 7e1c6ce8f0b0bf1c84b5cc339cb5afac582eeff8
    # skip: [60a44ecddd9c1fa28cb8ec4a0919bb939ff166be] Expand timeline length spinner in AnimationTimelineEdit
    git bisect skip 60a44ecddd9c1fa28cb8ec4a0919bb939ff166be
    # good: [42b4fc0710b1319185409c336eb94ac6e13b9106] Fix 'Could not resolve script' error after renaming a preloaded script
    git bisect good 42b4fc0710b1319185409c336eb94ac6e13b9106
    # skip: [e37b5c4035a53ed14d16acca9411578bf2b6bdba] Merge pull request #118076 from allenwp/output-max-linear-value-events
    git bisect skip e37b5c4035a53ed14d16acca9411578bf2b6bdba
    # good: [1f8c856870bdae6cef8ce306263c4ef424800c27] [.Net] Implement AddRange(ROS) for Array
    git bisect good 1f8c856870bdae6cef8ce306263c4ef424800c27
    # skip: [21af15773497f2ffd4fd646467387be966277598] Merge pull request #117944 from Ryan-000/Fix-117937
    git bisect skip 21af15773497f2ffd4fd646467387be966277598
    # bad: [bbc7150c95382024f299424a7e2ce205b3a7676c] Merge pull request #117861 from QbieShay/qbe/fix-angular-velocity
    git bisect bad bbc7150c95382024f299424a7e2ce205b3a7676c
    # skip: [e4a239b72b982e83fa204d896a8057b800857264] Merge pull request #112184 from Ryan-000/Add-inherit-emitter-scale-particles
    git bisect skip e4a239b72b982e83fa204d896a8057b800857264
    # skip: [edd83fa534010254976c7c98e1dc258822cc5808] Merge pull request #117742 from p-b-b/breakpoint-fix
    git bisect skip edd83fa534010254976c7c98e1dc258822cc5808
    # good: [1f70e1cebb53d24388933b9b9d905c4906ee9862] Right-click on scene tab without selecting it
    git bisect good 1f70e1cebb53d24388933b9b9d905c4906ee9862
    # skip: [237eae66ed7603e620d1d99a4fd3ad46c846e802] Merge pull request #118074 from KoBeWi/compacter_buttons
    git bisect skip 237eae66ed7603e620d1d99a4fd3ad46c846e802
    # skip: [a53c795c78674758ae7301de6a6fc3da9f9e63a2] Merge pull request #117463 from Goldenlion5648/inspector-property-expand
    git bisect skip a53c795c78674758ae7301de6a6fc3da9f9e63a2
    # skip: [2d327c811c667880929f47672629957168710615] Merge pull request #113879 from bruvzg/para_neg_align
    git bisect skip 2d327c811c667880929f47672629957168710615
    # skip: [c05358c1d6693ee0f07f993c19bd448f2dc62c00] Merge pull request #108073 from Gaktan/fix-decal-atlas
    git bisect skip c05358c1d6693ee0f07f993c19bd448f2dc62c00
    # bad: [223c9417bd3f5cb5df89858a778db9967e7a279a] Merge pull request #115632 from akien-mga/gles3-split-platform-egl
    git bisect bad 223c9417bd3f5cb5df89858a778db9967e7a279a
    # skip: [7e3bf93f8a7e803633e1afc44e021efce926705a] Merge pull request #117909 from QbieShay/qbe/fix-trimmed-transform
    git bisect skip 7e3bf93f8a7e803633e1afc44e021efce926705a
    # skip: [102c6f5eee6bc2f48dc02627102a6568fdc69979] Merge pull request #111518 from KoBeWi/noggle
    git bisect skip 102c6f5eee6bc2f48dc02627102a6568fdc69979
    # good: [15e587d4b017ef1eacb79ccb6aea224aa801944f] Fix SplineIK crash cases
    git bisect good 15e587d4b017ef1eacb79ccb6aea224aa801944f
    # skip: [bf055e3bf6fe2ccd9590c9414bd024de4305160b] Merge pull request #117945 from Togira123/fix-importer-mesh-instance-missing-properties
    git bisect skip bf055e3bf6fe2ccd9590c9414bd024de4305160b
    # skip: [64cf02362aa38322b520341625aa1cc1b9b45881] Jolt: Update `RigidBody3D` environmental properties more appropriately
    git bisect skip 64cf02362aa38322b520341625aa1cc1b9b45881
    # skip: [01006b8c91519a1931e572fb131913f6b4e24a60] Merge pull request #117947 from Togira123/fix-unsafe-access-to-dict
    git bisect skip 01006b8c91519a1931e572fb131913f6b4e24a60
    # bad: [1d6e1416cbf52e02d0e5d73b59e026cceeae8e0f] Merge pull request #117956 from marcozee03/fix-input-event-configuration-dialog
    git bisect bad 1d6e1416cbf52e02d0e5d73b59e026cceeae8e0f
    # good: [adeed3a45b1cc561cbe1e880b07a60aa29fd617e] Merge pull request #117878 from Jordyfel/compilation-configuration-editor-fix
    git bisect good adeed3a45b1cc561cbe1e880b07a60aa29fd617e
    # bad: [2e56f4ee538f0093c37568ef9e02938d08d2fe42] Merge pull request #116798 from bruvzg/tests_rs
    git bisect bad 2e56f4ee538f0093c37568ef9e02938d08d2fe42
    # bad: [656a268688cbb03723bb82116da7eb5b83989720] Merge pull request #117010 from bruvzg/voll_name_win
    git bisect bad 656a268688cbb03723bb82116da7eb5b83989720
    # good: [879a3012c887adb682a910611fab962c9620c278] Merge pull request #117358 from bruvzg/prop_ac_disc
    git bisect good 879a3012c887adb682a910611fab962c9620c278
    # good: [e03a2c4c76c4b9141ec29fb3d46afdd18c0fa4ac] Merge pull request #117282 from bruvzg/ac_pop_ctx
    git bisect good e03a2c4c76c4b9141ec29fb3d46afdd18c0fa4ac
    
  2. dukeman74 commented on Jun 26, 2026

    @dukeman74
    Author

    bisected to
    c46414c

  3. added this to the 4.8 milestone on Jun 26, 2026
  4. moved this from Unassessed to Very Bad in 4.x Release Priorities & Blockerson Jun 26, 2026
  5. ted-triv commented on Jun 26, 2026

    @ted-triv

    Having the exact same issue as you and I might have found what's causing it, at least on my laptop.

    In my case, I have an NTFS drive that I can only use on a VPN or local network (by design). Right clicking on it when disconnected from the VPN would crash file explorer, so the real source of the bug could be with Windows. Removing the drive or connecting to the VPN means Godot starts up as normal.

    I also have a webDAV mounted, but this isn't causing any problems even when I switch it off on the server's end.

  6. dukeman74 commented on Jun 26, 2026

    @dukeman74
    Author

    in dir_access_windows.cpp there is this function

    void DirAccessWindows::_update_drives() {
    	drives.clear();
    	DWORD mask = GetLogicalDrives();
    	for (int i = 0; i < MAX_DRIVES; i++) {
    		if (mask & (1 << i)) {
    			String drive = String::chr('A' + i) + ':';
    			String path = drive + '\\';
    			String label;
    			char16_t wlabel[4096];
    			if (GetVolumeInformationW((LPCWSTR)(path).utf16().get_data(), (LPWSTR)wlabel, 4096, nullptr, nullptr, nullptr, nullptr, 0)) {
    				label = String::utf16(wlabel);
    			}
    			drives.push_back(DriveInfo{ drive, label });
    		}
    	}
    }
    

    adding this in order to not run GetVolumeInformation 'fixes' the problem, obviously gutting the intended improvement here

    void DirAccessWindows::_update_drives() {
    	drives.clear();
    	DWORD mask = GetLogicalDrives();
    	for (int i = 0; i < MAX_DRIVES; i++) {
    		if (mask & (1 << i)) {
    			String drive = String::chr('A' + i) + ':';
    			String path = drive + '\\';
    			String label;
    			drives.push_back(DriveInfo{ drive, "H" });
    			continue;
    			char16_t wlabel[4096];
    			if (GetVolumeInformationW((LPCWSTR)(path).utf16().get_data(), (LPWSTR)wlabel, 4096, nullptr, nullptr, nullptr, nullptr, 0)) {
    				label = String::utf16(wlabel);
    			}
    			drives.push_back(DriveInfo{ drive, label });
    		}
    	}
    }
    
  7. dukeman74 commented on Jun 26, 2026

    @dukeman74
    Author

    it looks like it goes through this function twice when being launched for some reason, and disconnected network drives take about 8 seconds each before GetVolumeInformationW returns in error

  8. dukeman74 commented on Jun 26, 2026

    @dukeman74
    Author

    this seems a reasonable option and is what I will be using for the near future

    void DirAccessWindows::_update_drives() {
    	drives.clear();
    	DWORD mask = GetLogicalDrives();
    	for (int i = 0; i < MAX_DRIVES; i++) {
    		if (mask & (1 << i)) {
    			String drive = String::chr('A' + i) + ':';
    			String path = drive + '\\';
    			String label;
    			UINT type = GetDriveTypeW((LPCWSTR)(path).utf16().get_data());
    			if (type == DRIVE_REMOTE) {
    				drives.push_back(DriveInfo{ drive, "[network]" });
    				continue;
    			}
    			char16_t wlabel[4096];
    			if (GetVolumeInformationW((LPCWSTR)(path).utf16().get_data(), (LPWSTR)wlabel, 4096, nullptr, nullptr, nullptr, nullptr, 0)) {
    				label = String::utf16(wlabel);
    			}
    			drives.push_back(DriveInfo{ drive, label });
    		}
    	}
    }
    
  9. dukeman74 commented on Jun 26, 2026

    @dukeman74
    Author

    in case anyone else wants to be running 4.7, trusts me, is running into the issue, and doesn't want to build, there is a build under releases with just the above change on my fork

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

Metadata

Metadata

Assignees

Type

No type

Projects

Relationships

None yet

Development

No branches or pull requests

Issue actions