2012-01-25 69 views
0

在我的應用程序中,人們可以使用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 ...'部分,使得聲明更簡潔。 –

回答

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出來,我會建議你的可執行文件的構建平臺設置爲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

0

如果teamviewer獲得不是7的新版本,會發生什麼情況?

是不是更好地檢測第一個Windows版本,所以你可以決定要檢查什麼?

如果我點擊按鈕從應用程序啓動teamviewer,我沒有安裝teamviewer?你有沒有測試過?

我已經安裝的TeamViewer和在不必須installdirectory

相關問題