【问题标题】:Powershell equivalent of "Open with Code" Windows shell extension?Powershell 相当于“使用代码打开”Windows shell 扩展?
【发布时间】: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


【解决方案1】:

其实这个……

[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,然后按退格键,然后输入文件的完整路径。无需其他代码启动。

【讨论】:

  • 在一个新的 powershell 中,在一个恰好位于打开的 VS Code 树下的文件夹中,如果我输入代码 install.log,它会在一个新实例中打开它。它不会在现有实例中打开。
  • 我明白了,VSCode 的安装位置似乎随着时间的推移发生了变化。我刚刚从注册表文章中复制了该路径,自从它启动以来,我认为这是我一直使用的唯一一个位置。但实际上,我每天都在使用的是 AppData。一旦我引用同一个 EXE,它似乎使用现有实例(或多个实例中最旧的实例)。
  • 是的,当我看到你的路径时,我有点惊讶于你为什么从那里调用它。我的实验室中有几个系统用于不同的 OS/PS/VSCode 版本进行验证,只要您保持默认设置,您的用例就会得到满足。因此,如果这有助于解决您的用例,请务必在您接受答案时做出回答,以造福其他可能遇到此问题的人。我今天在另一个网站上看到了同样的用例,我只是将他们指向了这个交流。
猜你喜欢
  • 2011-01-12
  • 1970-01-01
  • 2014-12-20
  • 1970-01-01
  • 1970-01-01
  • 2011-08-08
  • 1970-01-01
  • 2016-09-02
  • 1970-01-01
相关资源
最近更新 更多