Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/375.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何为不同于exe的文件夹向Windows资源管理器添加上下文菜单项_Java_Jar_Path_Registry_Parameter Passing - Fatal编程技术网

Java 如何为不同于exe的文件夹向Windows资源管理器添加上下文菜单项

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

我成功地将一个项目添加到文件夹的上下文菜单中(这是最简单的部分),但当我尝试通过上下文菜单打开它时,我的程序是jar扩展。出现错误:此程序无法在您的计算机或类似计算机上工作,因此我尝试在命令值中写入以下内容:

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运行时遇到另一个问题,提示显示:

        • 此程序无法在您的计算机上运行;再说一遍
        在regedit中,我写了简单的:

        • path.ps1“%1”

        所以PowerShell学习我来了xD,感谢您的指导,可惜没有更简单的方法。我将发布完整的ps1script@KacperLechowicz我不是说你必须那样做。我只是希望,最终,这是一种更可靠的方法,总体上花费的时间更少;-)我很欣赏你的迅速复出;-)命令值中解决的确定问题应为:powershell“&”E:\Projekty\Java\Resize\u Program\out\artifacts\Resize\u Program\u jar\run.ps1“”%1