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

问题描述:

在我的应用程序中,人们可以使用teamviewer连接到远程计算机。人们可以选择名称并点击连接,teamviewer应用程序将以正确的参数开始,并开始一个teamviewer会话。VB.NET获取文件路径应用程序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 
+0

不要给它们分配一个值之前声明变量。您可以(也应该!)在声明时直接使用值初始化它们。 –

+0

你是这个意思吗?昏暗regKeyW7作为RegistryKey = Registry.LocalMachine。OpenSubKey(“SOFTWARE \ Wow6432Node \ TeamViewer \ Version7”,True) – PandaNL

+0

是的。事实上,如果你指定了'Option Strict On'和'Option Infer On'(这是一个好主意!),你可以省略'As ...'部分,使得声明更简洁。 –

您使用(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出来,我会建议你的可执行文件的构建平台设置为86,并透过SOFTWARE \的TeamViewer \ Version7消除对需要的关键的检查。当平台设置为x86时,即使应用程序在x64系统上运行,应用程序也会始终从注册表的32位配置单元中读取数据。 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

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

是不是更好地检测第一个Windows版本,所以你可以决定要检查什么?

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

我已经安装的TeamViewer和在不必须installdirectory