【发布时间】:2020-09-12 00:06:16
【问题描述】:
当我在 Windows 资源管理器中选择“使用代码打开”shell 扩展时,它会在现有的 VS Code 窗口中打开文件。我想在构建过程中从 Powershell 脚本执行相同的操作,以将一些输出日志加载到 VS Code 中。
刚刚执行:
& "C:\Program Files\Microsoft VS Code\Code.exe" .\install.log
总是打开一个新实例
我查看了注册表更改here,但它的行为与 shell 扩展的行为方式不同——它总是只是打开一个新的代码实例。此外,尽管有额外的 cmets here 关于创建新的注册表项,但这实际上并不是 shell 扩展的工作方式。
这是找到现有正在运行的Code进程并发送消息打开文件的情况吗?
不幸的是,使用:
Get-Process | Where-Object { $_.ProcessName -eq "Code" }
打开一个 Code 窗口,显示八个 Code 进程...
或者也许现有的 shell 扩展代码已经在某处可用,所以我可以看到它是如何让现有的 Code 实例打开文件的?
问题是因为 VS Code 随着时间的推移改变了安装位置
解决方案:只要您实际调用与现有 vscode 进程相同的二进制文件,它将在现有窗口中打开(基于当前操作)。由于供应商随着时间的推移而更改安装路径,因此验证您没有多个二进制文件非常重要。这也会影响上面链接中提到的注册表修复。
【问题讨论】:
-
我无法重现您的问题。当我运行“...\code.exe”file.ext 时,它确实重用了相同的 VS Code 实例窗口。但我注意到,当您使用“程序文件”时,我的 VS Code 安装在 %localappdata%\Programs\Microsoft VS Code 中。程序文件是一个受限区域,由于某种原因,VS Code(使用电子)可能无法重用在另一个安全上下文中启动的实例。单个实例是如何工作的是否创建了另一个进程,但它以某种方式找到了第一个,将工作交给它(并终止)。也许它不能在你的上下文中做到这一点。
-
@SimonMourier 在一个新的 powershell 中,在一个恰好位于打开的 VS Code 树下的文件夹中,如果我输入代码 install.log,它会在一个新实例中打开它。跨度>
-
我说的不是你打开的文件或文件夹的相对位置 vs 代码路径,而只是 VS Code 的安装路径,在 %localappdata% vs Program Files 下。
-
我明白了,VSCode 的安装位置似乎随着时间的推移发生了变化。我刚刚从注册表文章中复制了该路径,自从它启动以来,我认为这是我一直使用的唯一一个位置。但实际上,我每天都在使用的是 AppData。一旦我引用同一个 EXE,它似乎使用现有实例(或多个实例中最旧的实例)。
标签: powershell visual-studio-code shell-extensions