如何将上下文菜单项添加到Windows资源管理器中,用于与exe不同的文件夹

时间:2018-07-27 08:49:00

标签: java jar path registry parameter-passing

我已成功将一个项目添加到文件夹的上下文菜单中(这是简单的部分),但是当我尝试通过上下文菜单打开它时,我的程序是jar扩展名,该错误出现:该程序在您的计算机或类似的设备上将无法运行,所以我尝试在命令值中输入以下内容:

Java -jar path.jar "%1"

结果相同。我的解决方法是使用bat文件打开jar文件xD,但有两个问题:

  1. 每次都会弹出一个令人讨厌的黑色cmd窗口

  2. 带空格的路径不起作用(程序是否为空?)

该如何做才能摆脱这只蝙蝠?

2 个答案:

答案 0 :(得分:0)

我认为,这不仅仅是Windows问题,也不是Java问题,所以更多的是通用方法:

不要尝试直接运行您的Java代码。而是:写一个脚本(例如使用被调用的 PowerShell )。

那个脚本中,您可以执行以下操作:

  • searching Windows机器上的Java安装
  • 检查/转换相对路径为“正确”绝对值
  • 然后,最后使用正确的参数调用 some java.exe

答案 1 :(得分:0)

这是我的简单代码:

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运行它时,我还有另一个问题,出现提示:

  • 该程序无法在您的计算机上运行;再次。

在regedit中,我写的很简单:

  • path.ps1“%1”