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
您使用(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的一个很好的讨论,参见:
如果teamviewer获得不是7的新版本,会发生什么情况?
是不是更好地检测第一个Windows版本,所以你可以决定要检查什么?
如果我点击按钮从应用程序启动teamviewer,我没有安装teamviewer?你有没有测试过?
我已经安装的TeamViewer和在不必须installdirectory
不要给它们分配一个值之前声明变量。您可以(也应该!)在声明时直接使用值初始化它们。 –
你是这个意思吗?昏暗regKeyW7作为RegistryKey = Registry.LocalMachine。OpenSubKey(“SOFTWARE \ Wow6432Node \ TeamViewer \ Version7”,True) – PandaNL
是的。事实上,如果你指定了'Option Strict On'和'Option Infer On'(这是一个好主意!),你可以省略'As ...'部分,使得声明更简洁。 –