java - Windows 7 如何让资源管理器使用 vbs 脚本打开文件
问题描述
我在没有管理员权限的 Windows 7 上运行 openjdk
我通过资源管理器“打开方式”对话框选择 java 作为“打开”.jar 文件的程序。要通过(双击)单击运行 .jar 文件,Windows 会执行类似的操作
java(文件名).jar
但是,java需要参数-jar,即:
java -jar (文件名).jar
要进行此设置,用户需要管理员权限才能使用 assoc 和 ftype,
或按照以下答案中的说明实施寄存器编辑。
另一种解决方法是使用批处理文件,例如 javastart.bat:
列出 javastart.jar
start java -jar %1
在浏览器“打开方式”对话之后,这有效。单击 jar 文件将打开命令窗口,这将启动 java.jar。
但是,当 java 运行时,命令窗口也打开了,这很丑陋。
编辑
必须调用 javaw.exe,命令窗口将关闭:
start javaw.exe -jar %1
关闭命令窗口不需要以下脚本
编辑结束
为了解决这个问题,我启动了一个 vbs 脚本。
新上市 javastart.jar
start startjar.vbs %1
和 startjar.vbs:
Set args = Wscript.Arguments
cmd = "java -jar " & chr(34) & args(0) & chr(34)
Set WshShell = CreateObject("WScript.Shell")
CreateObject("Wscript.Shell").Run cmd, 0, True
这有效:现在我得到一个启动 vbs 的命令窗口的短暂闪烁,然后无窗口 vbs 脚本启动 java 和 jar 文件。
但是,当我直接用 startjar.vbs 打开 jar 文件时(右键单击 jar 文件,而不是通过对话框打开),jar 文件的名称不会作为参数传递给 vbs,但 windows 会尝试直接运行 jar 文件(并给出错误:“.jar 文件不是有效的 win32 应用程序”)。
为什么 Windows 资源管理器不将文件名作为参数发送给 vbs 脚本?
解决方案
HKCR 下的设置来自 HKCU\Software\Classes 和 HKLM\Software\Classes。您当然可以编辑 HKCU 设置,因为它们是您的。如果它们存在,它们会覆盖完全相同的 HKLM 设置。在 HKCR 下,您将看到两者的合并视图,其中 CU 覆盖任何 LM 设置。
这从记事本的设置开始。修复 javaw.exe 文件的路径。
jar 文件现在在新建菜单上,由 windows 搜索搜索,被视为文本文件,因此在右键菜单上编辑但作为程序文件打开。
如果您是非管理员,请使用 reg 命令进行合并(在修复路径之后)。如果您是管理员,请双击它。
Windows Registry Editor Version 5.00
[HKEY_CURRENT_USER\SOFTWARE\Classes\jarfile]
@="Java Program File"
[HKEY_CURRENT_USER\SOFTWARE\Classes\jarfile\shell]
[HKEY_CURRENT_USER\SOFTWARE\Classes\jarfile\shell\open]
[HKEY_CURRENT_USER\SOFTWARE\Classes\jarfile\shell\open\command]
@="C:\\Folder\\javaw.exe -jar \"%1\""
[HKEY_CURRENT_USER\SOFTWARE\Classes\.jar]
@="jarfile"
"Content Type"="text/plain"
"PerceivedType"="text"
[HKEY_CURRENT_USER\SOFTWARE\Classes\.jar\PersistentHandler]
@="{5e941d80-bf96-11cd-b579-08002b30bfeb}"
[HKEY_CURRENT_USER\SOFTWARE\Classes\.jar\ShellNew]
"ItemName"=hex(2):6a,00,61,00,72,00,66,00,69,00,6c,00,65,00,00,00
"NullFile"=""
推荐阅读
- java - 在Java中,一次加载所有纹理或在需要时不同时间加载所有纹理更有效
- java - 试图让文本里面
- 标签,但它只返回第一项 Selenium
- javascript - 无响应的 id 的单击事件处理程序。(或者至少我认为)
- windows - Windows shell 中的时间最大值,为什么?
- python - 从现有数据框中的行子集创建新的 pandas 数据框
- maven - 如何使用带有geb的testng并行运行执行测试类
- python - 是否可以从熊猫数据框中获取图表,包括带有特殊颜色的 Heatmap 缺失数据?
- php - Symfony 4 EasyAdmin - 在树枝模板中呈现关联数据类型
- php - 输入类型:文本 - 对于允许 http 链接但不允许 https 的 url 输入?
- git - 清理日志中的提交输出?