VB.NET获取文件路径应用程序teamviewer

时间:2012-01-25 08:59:34

标签: vb.net registry

在我的应用程序中,人们可以使用teamviewer连接到远程计算机。人们可以选择名称并点击连接,teamviewer应用程序将以正确的参数开始,并启动团队查看器会话。

只有一个问题,我如何才能获得安装teamviewer的路径。

我以为我可以使用注册表来获取路径,所以我写了这段代码。

Dim regKey As RegistryKey
    regKey = Registry.LocalMachine.OpenSubKey("SOFTWARE\Wow6432Node\TeamViewer\Version7", True)
    TeamViewerPath = regKey.GetValue("InstallationDirectory", AccessibleDescription)

它运行完美,它将获得安装teamviewer的正确路径,但这仅适用于64位Windows 7.我怎样才能使这项工作适用于Windows XP 32位和Windows 7 32位。

编辑:写下以下代码并且它有效,它可能不是最好或最干净的方式,但它可以解决问题。

Dim regKeyW7 As RegistryKey
    Dim regKeyWXP As RegistryKey
    Dim TeamViewerPath As String
    regKeyW7 = Registry.LocalMachine.OpenSubKey("SOFTWARE\Wow6432Node\TeamViewer\Version7", True)
    If regKeyW7 Is Nothing Then
        regKeyWXP = Registry.LocalMachine.OpenSubKey("SOFTWARE\TeamViewer\Version7", True)
        TeamViewerPath = regKeyWXP.GetValue("InstallationDirectory", AccessibleDescription)
        Label21.Text = "Windows XP"
    Else
        TeamViewerPath = regKeyW7.GetValue("InstallationDirectory", AccessibleDescription)
        Label21.Text = "Windows 7"
    End If

2 个答案:

答案 0 :(得分:1)

您正在使用的密钥(Wow6432Node)是一个反射器;它是在64位操作系统上运行的32位应用程序的注册表视图。 32位系统上不存在此密钥,而您的OpenSubKey(“SOFTWARE \ Wow6432Node \ TeamViewer \ Version7”,True)可能会引发异常。

请参阅:http://msdn.microsoft.com/en-us/library/windows/desktop/ms724072(v=vs.85).aspx

如果您觉得必须采用这种方法来阅读InstallationDirectory,我建议您将可执行文件的构建平台设置为x86,并通过SOFTWARE \ TeamViewer \ Version7访问密钥,从而无需进行检查。当平台设置为x86时,应用程序将始终从注册表的32位配置单元读取,即使它在x64系统上运行。 Windows将自动为您在Wow6432Node下进行查找。

我的猜测是你的目标平台设置为'任何CPU',这基本上意味着应用程序将使用执行平台(在运行时)来确定SOFTWARE \ TeamViewer \ Version7的位置真正来自何处。在这种情况下,当您的应用程序在64位系统上运行时,OpenSubKey(“SOFTWARE \ TeamViewer \ Version7”)将查看注册表的64位版本(因此找不到密钥,并落入您的其他情况)。当应用程序在使用OpenSubKey(“SOFTWARE \ TeamViewer \ Version7”)的32位系统上运行时,它确实会找到该值,因为没有64位版本的注册表。

有关'任何CPU'和x86的详细讨论,请参阅:

http://blogs.msdn.com/b/rmbyers/archive/2009/06/09/anycpu-exes-are-usually-more-trouble-then-they-re-worth.aspx

答案 1 :(得分:0)

如果teamviewer获得的新版本不是7,会发生什么?

首先检测Windows版本是不是更好,这样你就可以决定要检查什么?

如果我点击按钮从应用程序启动teamviewer并且我没有安装teamviewer?你测试过了吗?

我安装了teamviewer并且在注册表中没有installdirectory