Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/14.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
Vb.net 以编程方式检测计算机上的JDK安装_Vb.net - Fatal编程技术网

Vb.net 以编程方式检测计算机上的JDK安装

Vb.net 以编程方式检测计算机上的JDK安装,vb.net,Vb.net,这是我的代码,用于检测机器上的JDK安装。。 执行时的代码给出了处理的异常:- 第164行为:-如果ndpKey为Nothing,也就是ndpKey.GetValue(“CurrentVersion”)为Nothing,则 Private Function HAS_JDK() As Boolean Try Const subkeyjava As String = "SOFTWARE\JavaSoft\Java Runtime Environment" U

这是我的代码,用于检测机器上的JDK安装。。 执行时的代码给出了处理的异常:-

第164行为:-
如果ndpKey为Nothing,也就是ndpKey.GetValue(“CurrentVersion”)为Nothing,则

Private Function HAS_JDK() As Boolean
    Try
        Const subkeyjava As String = "SOFTWARE\JavaSoft\Java Runtime Environment"

        Using ndpKey As RegistryKey = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry32).OpenSubKey(subkeyjava)
            If ndpKey Is Nothing AndAlso ndpKey.GetValue("CurrentVersion") Is Nothing Then
                Close()
                Return False
            Else
                Return True
            End If
        End Using

    Catch e As NullReferenceException
        MessageBox.Show("System Error Occured While Checking JDK !! ", "BLA BLA BLA - Error Occured !!")
        MessageBox.Show(e.ToString())
        Close()
        Return -1
    End Try
End Function

你的逻辑有点不正确。我想你想要的是
OrElse

If ndpKey Is Nothing OrElse ndpKey.GetValue("CurrentVersion") Is Nothing Then

这将检查ndpKey
ndpKey.GetValue(“当前版本”)
是否为空。如果第一次检查成功,那么第二次检查将不会继续,因此也不会例外。

为什么将其标记为java,而这是一个vb.net任务?你为什么要这样做?是的,我知道这是一个vb.net任务,但我想知道是否有任何其他解决方案,从java方面,我可以使用。。。它也适用于我的应用程序,用于检查jdk安装。@stultuskei如果它是一个用于检查是否有文本编辑器的程序,您会将其标记为记事本任务吗?所以:您正在运行vb代码,这意味着没有运行java虚拟机。。。那么java将如何提供帮助呢?这些评论对于澄清这个问题是必要的。不要被那些试图帮助你的用户激怒。集中精力改进您的问题。@VivekRajAgarwal评论旨在帮助您改进您的问题。请不要对试图帮助你的人大喊大叫。我尝试了你的解决方案,现在它告诉我我没有安装jdk,但我已经安装了jdk。所以我猜它没有按预期的方式工作。@VivekRajAgarwal:那是因为检查失败,很可能是因为你使用了
RegistryView.Registry32
。如果该项在32位注册表中不存在,那么它当然将是
Nothing
。尝试稍微修改一下代码,看看是否可以让它检查实际的注册表值,或者跳过
RegistryView
,将应用程序编译为
AnyCPU
@VivekRajAgarwal:代码可以工作,但您要查找的键很可能不存在于32位注册表中。有关更多信息,请参阅:它成功了!!正在将注册表32更改为注册表64谢谢@维维卡:很高兴我能帮上忙。不过要注意,如果您强制它使用64位视图,那么它在32位系统上是否能正常工作还不确定。最好是将其设置为
RegistryView.Default
,并将应用程序编译为
AnyCPU
。这样,它将适应当前的系统。