diff --git a/resources/win32/bin/code.sh b/resources/win32/bin/code.sh index 3389d898bb8..82f808a8650 100644 --- a/resources/win32/bin/code.sh +++ b/resources/win32/bin/code.sh @@ -6,11 +6,23 @@ COMMIT="@@COMMIT@@" APP_NAME="@@APPNAME@@" QUALITY="@@QUALITY@@" NAME="@@NAME@@" - +VSCODE_PATH="$(dirname "$(dirname "$(realpath "$0")")")" +ELECTRON="$VSCODE_PATH/$NAME.exe" if grep -qi Microsoft /proc/version; then # in a wsl shell - WIN_CODE_CMD=$(wslpath -w "$(dirname "$(realpath "$0")")/$APP_NAME.cmd") - if ! [ -z "$WIN_CODE_CMD" ]; then + fallback() { + # If running under older WSL, don't pass cli.js to Electron as + # environment vars cannot be transferred from WSL to Windows + # See: https://github.com/Microsoft/BashOnWindows/issues/1363 + # https://github.com/Microsoft/BashOnWindows/issues/1494 + "$ELECTRON" "$@" + exit $? + } + WSL_BUILD=$(uname -r | sed -E 's/^.+-([0-9]+)-Microsoft/\1/') + # wslpath is not available prior to WSL build 17046 + # See: https://docs.microsoft.com/en-us/windows/wsl/release-notes#build-17046 + if [ -x /bin/wslpath ]; then + WIN_CODE_CMD=$(wslpath -w "$(dirname "$(realpath "$0")")/$APP_NAME.cmd") # make sure the cwd is in the windows fs, otherwise there will be a warning from cmd pushd "$(dirname "$0")" > /dev/null WSL_EXT_ID="ms-vscode.remote-wsl" @@ -21,17 +33,22 @@ if grep -qi Microsoft /proc/version; then WSL_CODE=$(wslpath -u "${WSL_EXT_WLOC%%[[:cntrl:]]}")/scripts/wslCode.sh "$WSL_CODE" $COMMIT $QUALITY "$WIN_CODE_CMD" "$APP_NAME" "$@" exit $? + elif [ $WSL_BUILD -ge 17063 ] 2> /dev/null; then + # Since WSL build 17063, we just need to set WSLENV so that + # ELECTRON_RUN_AS_NODE is visible to the win32 process + # See: https://docs.microsoft.com/en-us/windows/wsl/release-notes#build-17063 + export WSLENV=ELECTRON_RUN_AS_NODE/w:$WSLENV + CLI=$(wslpath -m "$VSCODE_PATH/resources/app/out/cli.js") + else # $WSL_BUILD ∈ [17046, 17063) OR $WSL_BUILD is indeterminate + fallback "$@" fi + else + fallback "$@" fi -fi - -VSCODE_PATH="$(dirname "$(dirname "$(realpath "$0")")")" - -if [ -x "$(command -v cygpath)" ]; then +elif [ -x "$(command -v cygpath)" ]; then CLI=$(cygpath -m "$VSCODE_PATH/resources/app/out/cli.js") else CLI="$VSCODE_PATH/resources/app/out/cli.js" fi -ELECTRON="$VSCODE_PATH/$NAME.exe" ELECTRON_RUN_AS_NODE=1 "$ELECTRON" "$CLI" "$@" exit $? \ No newline at end of file