mirror of
https://github.com/microsoft/vscode.git
synced 2026-08-08 14:59:08 +01:00
The standalone CLI should detect and fall back to using and system-installed VS Code instance, rather than trying to download zips and manage its own VS Code instances. There are three approaches used for discovery: - On Windows, we can easily and quickly read the register to find installed versions based on their app ID. - On macOS, we initially look in `/Applications` and fall back to the slow `system_profiler` command to list app .app's if that fails. - On Linux, we just look in the PATH. I believe all Linux installers (snap, dep, rpm) automatically add VS Code to the user's PATH. Failing this, the user can also manually specify their installation dir, using the command `code version use stable --install-dir /path/to/vscode`. Fixes #164159
31 lines
990 B
Rust
31 lines
990 B
Rust
/*---------------------------------------------------------------------------------------------
|
|
* Copyright (c) Microsoft Corporation. All rights reserved.
|
|
* Licensed under the MIT License. See License.txt in the project root for license information.
|
|
*--------------------------------------------------------------------------------------------*/
|
|
|
|
use std::{env, io};
|
|
|
|
/// Gets whether the current CLI seems like it's running in integrated mode,
|
|
/// by looking at the location of the exe and known VS Code files.
|
|
pub fn is_integrated_cli() -> io::Result<bool> {
|
|
let exe = env::current_exe()?;
|
|
|
|
let parent = match exe.parent() {
|
|
Some(parent) if parent.file_name().and_then(|n| n.to_str()) == Some("bin") => parent,
|
|
_ => return Ok(false),
|
|
};
|
|
|
|
let parent = match parent.parent() {
|
|
Some(p) => p,
|
|
None => return Ok(false),
|
|
};
|
|
|
|
let expected_file = if cfg!(target_os = "macos") {
|
|
"node_modules.asar"
|
|
} else {
|
|
"resources.pak"
|
|
};
|
|
|
|
Ok(parent.join(expected_file).exists())
|
|
}
|