### Preflight Checklist

- [X] I have read the [Contributing Guidelines](https://github.com/electron/electron/blob/main/CONTRIBUTING.md) for this project.
- [X] I agree to follow the [Code of Conduct](https://github.com/electron/electron/blob/main/CODE_OF_CONDUCT.md) that this project adheres to.
- [X] I have searched the [issue tracker](https://www.github.com/electron/electron/issues) for a bug report that matches the one I want to file, without success.

### Electron Version

17.3.1, also affected: 16, 17, 18, 19, 20

### What operating system are you using?

macOS

### Operating System Version

12.3, also affected: Win, Linux

### What arch are you using?

x64

### Last Known Working Electron version

15.3.4

### Expected Behavior

Requesting `app.requestSingleInstanceLock()` on first start of the app should return `true`.

### Actual Behavior

Requesting `app.requestSingleInstanceLock()` on first start of the app returns `false`.

### Testcase Gist URL

https://gist.github.com/6d51100568b78f98c5177cb27d370f9f

### Additional Information

It seems that the issue only exists when setting the `userData` path to a non-existent folder (which is most likely the case when you start the app for the first time on a fresh computer). Subsequent starts result in correct behavior because the folder has been created by then. The issue was not present in E15 and below; I'll bisect further.

The issue becomes problematic when implementing a behavior as described [in the docs](https://www.electronjs.org/docs/latest/api/app#apprequestsingleinstancelockadditionaldata) because the app will just quit on first start:
```js
const gotTheLock = app.requestSingleInstanceLock(additionalData)
if (!gotTheLock) {
  app.quit()
} else {...
```

cc @miniak 

_funfact: this was a pain to debug since it crashed our CI in a very obscure way 😆_ 
shell/browser/api/electron_api_app.cc
Emit("new-window-for-tab");
}
void App::OnDidBecomeActive() {
  Emit("did-become-active");
}
#endif
bool App::CanCreateWindow(
    content::RenderFrameHost* opener,
    const GURL& opener_url,
    const GURL& opener_top_level_frame_url,
    const url::Origin& source_origin,
    content::mojom::WindowContainerType container_type,
    const GURL& target_url,
    const content::Referrer& referrer,
    const std::string& frame_name,
    WindowOpenDisposition disposition,
    const blink::mojom::WindowFeatures& features,
    const std::string& raw_features,
    const scoped_refptr<network::ResourceRequestBody>& body,
    bool user_gesture,
    bool opener_suppressed,
    bool* no_javascript_access) {
  v8::Isolate* isolate = JavascriptEnvironment::GetIsolate();
  v8::Locker locker(isolate);
  v8::HandleScope handle_scope(isolate);
  content::WebContents* web_contents =
      content::WebContents::FromRenderFrameHost(opener);
  if (web_contents) {