现在我有这么一个注册表项, 希望添加一个目录空白处右键菜单, 调用一个 vbscript 脚本用 Neovide 打开目录
[HKEY_CLASSES_ROOT\Directory\Background\shell\nvimwithoutplugins\command]
@="wscript C:\\Devtools\\Neovim\\bin\\start.vbs %1"
现在脚本双击执行或命令行下执行是没问题的, 但写到注册表里用右键菜单调用就提示找不到文件
This file does not associated with for performing this action...
但是默认文件关联 .vbs 确实是 wscript.exe
去掉 %1 参数就提示找不到文件
The system cannot find the file specified.
但是这个文件路径又确实存在.
简而言之就是, 文件路径没问题, 文件关联也没问题, 命令行下调用 start.vbs ./
也没问题, 双击执行 vbs 脚本也没问题, 只有写在注册表里的命令有问题, 求解是什么原因?
不是很懂注册表的路径查找机制, 从别地方抄来糊的...
1
yaoyao1128 2023-03-09 07:19:02 +08:00 via iPhone
用 wscript.exe 的绝对路径
|
2
kokutou 2023-03-09 07:33:26 +08:00 via Android
这种问题英文在 Google 搜,
explorer rightclick menu Background command not found 第一个 stackoverflow 就有答案和注意事项,注意事项就有 1 楼说的。。。 |
3
Al0rid4l OP @yaoyao1128
@kokutou 一开始我就是绝对路径, 不过后来发现似乎没什么区别, 都是报错, 那就索性写短一点了 现在是这样, 还是一样的错误 ``` [HKEY_CLASSES_ROOT\Directory\Background\shell\nvimwithoutplugins] @="Open Neovide here" "Icon"="C:\\Devtools\\Neovim\\bin\\neovide.exe,0" [HKEY_CLASSES_ROOT\Directory\Background\shell\nvimwithoutplugins\command] @="\"C:\Windows\System32\wscript.exe\" \"C:\\Devtools\\Neovim\\bin\\start.vbs\" \"%V\"" ``` 其实其他的 exe 文件这样添加的右键菜单也都没问题, 就只有 vbs 会提示找不到文件(但文件确实存在路径没错) |
4
yaoyao1128 2023-03-09 08:10:51 +08:00 via iPhone
双斜线
|
5
Al0rid4l OP @yaoyao1128 眼花了, 不过也没啥区别...这个 reg 文件中的双斜杠导入到了 GUI 的编辑器里和单斜杠一样都变成了单斜杠
感觉不是这么个问题, 因为换其他 exe 都能正常调用, 有没有什么调试让它打印它执行的命令的方法? 这 MS 真是惜字如金, 报错信息说一半就不说了 |
6
yaoyao1128 2023-03-09 08:36:08 +08:00 via iPhone
你可以用正斜杠,也可以用双斜杠……但是你这个直接识别不到路径( C:WindowsSystem32wscript.exe )……找不到 wscript.exe 自然没办法运行提示这个。
|
7
Al0rid4l OP @yaoyao1128 找不到路径的不是 wscript, 因为把 value 单独写成 wscript 是可以打开一个 GUI 的 Windows Script Host Settings 的, 是提示 start.vbs 找不到路径
报错大概是个什么情况呢, 就你随便写个 test.vbs, eg. c:\demo\test.vbs, 打开 Windows explorer 到 demo 目录, 地址栏输入 c:\demo\test.vbs, 可以执行, 把 Windows explorer 切到其他目录, 再输入 c:\demo\test.vbs, 就报错执行不了了. 这个注册表右键菜单就和这个报错一样. 同样的操作, 把 test.vbs 换成一个 test.exe 就没问题. 不理解 vbs 在 Windows 下是有什么特殊机制, 这 vbs 也是现学了点语法糊的. |
8
yaoyao1128 2023-03-09 09:01:50 +08:00 via iPhone
@Al0rid4l 你贴下 vbs 吧(
|
9
VDarker 2023-03-09 09:06:43 +08:00
vbs 里 转到脚本所在目录试一下 应该是需要切换工作目录
|
10
Al0rid4l OP @yaoyao1128 vbs 么, 也就是隐藏一下 bat 的命令行窗口用
``` Set oParameters = WScript.Arguments If oParameters.Count > 0 Then CreateObject("Wscript.Shell").Run ".\neovide.bat " + WScript.Arguments(0),0,True Else CreateObject("Wscript.Shell").Run ".\neovide.bat",0,True End If ``` 如果还要 bat 的内容 ``` start /b c:\devtools\neovim\bin\nvim --listen 127.0.0.1:23333 --headless -u NONE -- %1 c:\devtools\neovim\bin\neovide.exe --remote-tcp 127.0.0.1:23333 ``` 至于为什么要整这么个东西...大概就是我需要两个右键菜单项打开 Neovide, 一个加载插件一个不加载插件, 然而 Neovide 不支持直接将命令行选项传到 Neovim, 所以只能自己写脚本绕过 Neovide 来传递参数到 Neovim 了. 现在加载插件的右键菜单工作正常, 直接调 neovide.exe 就行, 另一个么就是这个 vbs + bat 脚本了. 不过我觉得这个脚本内容和问题没啥关系就是了, 因为命令行或 GUI 执行 `start.vbs ./` 或 `start.vbs file` 都没什么问题, 仅仅是在这个注册表或者 explorer 地址栏执行才会报错. @VDarker 根据报错和其他执行成功的情况来看, 应该是系统 /解释器找不到 start.vbs 脚本, 不是 start.vbs 脚本里的代码找不到其他东西, 不然那个报错给的找不到文件的路径(start.vbs 而不是 neovide.bat)就是完完全全误导人了...当然我也不是很懂 vbs 就是了, 等会查下怎么切试试, 如果你能给个具体 API 那更好了 |
11
yaoyao1128 2023-03-09 09:41:01 +08:00 1
.\neovide.bat 绝对路径
你的提示估计是 start.vbs:找不到路径 而不是 无法找到脚本文件“start.vbs” 所以是 start.vbs 的问题了 |
12
Al0rid4l OP @yaoyao1128 卧槽我的神! 那个报错太迷惑了, 第一行写着 C:\Devtools\Neovim\bin\start.vbs, 第二行写着 The system cannot find the file specified. 原来是这个 vbs 文件里面的报错...
再请教个问题, 现在 %1 或者 %V 参数并没有被传递到 vbs, 看了下 wscript.exe 的文档说要传参数给脚本, 参数前要加 /. 也就是原本 neovide.vbs test.c 的命令, 用 wscript 要写成 wscript neovide.vbs /test.c 这个在命令行下执行也没问题. 但是现在在注册表里写 @="\"C:\\Windows\\System32\\wscript.exe\" \"C:\\Devtools\\Neovim\\bin\\neovide.vbs\" \"/%V\"" /%V 展开后似乎并没有被作为参数传递到 vbs, 导致打开的不是右键菜单所在目录 /文件而是空白文件, 这地方该怎么写呢? 现在是 \"/%V\", 还是 /\"%V\" ? 还是 \"/\"\"%V\" ? |
13
Al0rid4l OP @yaoyao1128 啊不用了, 已经试出来了
|