Java 如何为不同于exe的文件夹向Windows资源管理器添加上下文菜单项
我成功地将一个项目添加到文件夹的上下文菜单中(这是最简单的部分),但当我尝试通过上下文菜单打开它时,我的程序是jar扩展。出现错误:此程序无法在您的计算机或类似计算机上工作,因此我尝试在命令值中写入以下内容:Java 如何为不同于exe的文件夹向Windows资源管理器添加上下文菜单项,java,jar,path,registry,parameter-passing,Java,Jar,Path,Registry,Parameter Passing,我成功地将一个项目添加到文件夹的上下文菜单中(这是最简单的部分),但当我尝试通过上下文菜单打开它时,我的程序是jar扩展。出现错误:此程序无法在您的计算机或类似计算机上工作,因此我尝试在命令值中写入以下内容: Java -jar path.jar "%1" 结果相同。我的解决方法是使用bat文件打开jar文件xD,但存在两个问题: 每次都会弹出一个令人不快的黑色窗口 带空格的路径不起作用(程序为空?) 如何做到这一点,这样我就可以摆脱这种蝙蝠?我认为,这更多的是一个Windows问题,而不是j
Java -jar path.jar "%1"
结果相同。我的解决方法是使用bat文件打开jar文件xD,但存在两个问题:
如何做到这一点,这样我就可以摆脱这种蝙蝠?我认为,这更多的是一个Windows问题,而不是java问题,因此更像是一种通用方法: 不要试图直接运行java代码。而是:编写一个脚本(例如,使用调用的PowerShell) 在脚本中,您可以执行以下操作:
- 用于java安装的windows计算机
- 检查/将相对路径转换为“正确”绝对值
- 然后,最后使用正确的参数调用一些java.exe
- 以下是我的简单代码:
param (
[string]$p1
)
function Find-JavaExe {
[CmdletBinding()]
param ()
$JavaExeSuffix = 'bin\java.exe'
if ($env:JAVAHOME -eq $null) {
Write-Debug "`$env:JAVAHOME doesn't exist, going to look elsewhere"
}
else {
$JavaHomeBasedPath = Join-Path $env:JAVAHOME $JavaExeSuffix
Write-Debug "Testing for $JavaHomeBasedPath, based on `$env:JAVAHOME"
if (Test-Path $JavaHomeBasedPath) {
Write-Debug "Found $JavaExePath"
return $JavaExePath
}
}
$RegistrySearchPaths = @('HKLM:\SOFTWARE\JavaSoft\Java Runtime Environment\', 'HKLM:\SOFTWARE\Wow6432Node\JavaSoft\Java Runtime Environment\')
$JavaExePath = $RegistrySearchPaths |
where { Test-Path $_ } |
% {
$CurrentVersion = (Get-ItemProperty $_).CurrentVersion
Write-Debug "Current Java version is $CurrentVersion, based on $($_)"
$VersionKey = Join-Path $_ $CurrentVersion
$JavaHomeBasedPath = Join-Path (Get-ItemProperty $VersionKey).JavaHome $JavaExeSuffix
Write-Debug "Testing for $JavaHomeBasedPath, based on $VersionKey\JavaHome"
if (Test-Path $JavaHomeBasedPath) { $JavaHomeBasedPath }
} |
select -First 1
if ($JavaExePath -ne $null) {
Write-Debug "Found $JavaExePath"
return $JavaExePath
}
}
$path_java = Find-JavaExe
$java_param = " -jar "
$path_prog =
$ExecutionContext.SessionState.Path.GetUnresolvedProviderPathFromPSPath('.\')
$program_name = "\ResizeProgram.jar "
$command = $path_java + $java_param + $path_prog + $program_name + """$p1"""
iex $command
它工作正常,并使用空格处理路径
但我在从文件夹的comtextmenu运行时遇到另一个问题,提示显示:
- 此程序无法在您的计算机上运行;再说一遍
- path.ps1“%1”