【发布时间】:2012-01-25 08:59:34
【问题描述】:
在我的应用程序中,人们可以使用 teamviewer 连接到远程计算机。人们可以选择那里的名称并单击连接,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
【问题讨论】:
-
在赋值之前不要声明变量。您可以(并且应该!)在声明时直接用一个值初始化它们。
-
你是这个意思吗? Dim regKeyW7 As RegistryKey = Registry.LocalMachine.OpenSubKey("SOFTWARE\Wow6432Node\TeamViewer\Version7", True)
-
是的,完全正确。事实上,如果您指定了
Option Strict On和Option Infer On(无论如何这都是个好主意!),您可以省略As …部分,使声明更加简洁。 -
@KonradRudolph 我发现它通常更令人困惑,而不是如果省略
As ...部分会有所帮助;) -
@Nicholas 为什么?我建议这是由于您的变量命名或软件设计(因为类型变得不透明),而不是由于遗漏了
As …。此处提供的信息完全是多余的,只要变量命名正确。