问题描述
当我在Windows资源管理器中选择“使用代码打开” shell扩展名时,它将在现有的VS Code窗口中打开文件。我想在构建过程中通过Powershell脚本执行相同的操作,以将一些输出日志加载到VS Code中。
只需执行:
& "C:\Program Files\Microsoft VS Code\Code.exe" .\install.log
总是打开一个新实例
我已经看过注册表更改here,但它的行为与shell扩展的行为不同-它始终只是打开一个新的Code实例。另外,尽管有关于创建新注册表项的其他评论here,但实际上并不是Shell扩展的工作原理。
这是查找现有的正在运行的Code进程并向其发送消息以打开文件的情况吗?
不幸的是,使用:
Get-Process | Where-Object { $_.ProcessName -eq "Code" }
也许现有的Shell扩展代码已经在某处可用,所以我可以看到它如何使现有的Code实例打开文件?
问题是因为VS Code随时间改变了安装位置
解决方案:只要您实际调用与现有vscode进程相同的二进制文件,它将在现有窗口中打开(基于当前操作)。验证由于供应商随时间变化的安装路径而导致您没有多个二进制文件非常重要。这也会影响上面链接中提到的注册表修复程序。
解决方法
实际上是这个...
[Get-Process | Where-Object { $_.ProcessName -eq "Code" }]
...即使您看起来像打开了一个Code.exe窗口,实际上它也总是2个或更多,这取决于您配置VSCode的方式和方式。例如,在我的开发箱中执行此操作将返回9 ...
Get-Process |
Where-Object { $_.ProcessName -eq "Code" } |
Select-Object -Property ID,SessionId,Path,PriorityClass
<#
Id SessionId Path PriorityClass
-- --------- ---- -------------
1200 2 C:\Users\postanote\AppData\Local\Programs\Microsoft VS Code\Code.exe Normal
2520 2 C:\Users\postanote\AppData\Local\Programs\Microsoft VS Code\Code.exe Normal
5168 2 C:\Users\postanote\AppData\Local\Programs\Microsoft VS Code\Code.exe Normal
6292 2 C:\Users\postanote\AppData\Local\Programs\Microsoft VS Code\Code.exe AboveNormal
10856 2 C:\Users\postanote\AppData\Local\Programs\Microsoft VS Code\Code.exe Normal
13556 2 C:\Users\postanote\AppData\Local\Programs\Microsoft VS Code\Code.exe Normal
16920 2 C:\Users\postanote\AppData\Local\Programs\Microsoft VS Code\Code.exe Normal
19528 2 C:\Users\postanote\AppData\Local\Programs\Microsoft VS Code\Code.exe Normal
20424 2 C:\Users\postanote\AppData\Local\Programs\Microsoft VS Code\Code.exe Normal
#>
...这已启动。
还,为什么要这样调用VSCode? p>
& "C:\Program Files\Microsoft VS Code\Code.exe" .\install.log
在安装时,它会添加到您的用户路径中(除非您在安装时更改了它)...
C:\Users\postanote\AppData\Local\Programs\Microsoft VS Code
...因此您只需要这样做...
code D:\Temp\abc.txt
...从PowerShell控制台主机,ISE,VScode等调用它时,它将加载到您正在使用的当前实例中。
我每天都这样做。在VSCode出现之前,在ISE中,您可以调用psEdit进行相同的操作。
psEdit -filenames D:\Temp\abc.txt
如果您已经在VScode中,请先按F1,然后按Backspace,然后键入文件的完整路径。无需其他代码启动。