2012-01-25 8 views
0

私のアプリケーションでは、teamviewerを使用してリモートコンピュータに接続できます。人々が名前を選択して接続をクリックすると、チームビューアアプリが正しいパラメータで開始され、チームビューアセッションが開始されます。VB.NETファイルパスアプリケーションチームビューアを取得する

チームビューアがインストールされているパスを取得する方法は1つだけです。

私はパスを取得するためにレジストリを使用できると思ったので、このコードを書きました。これは完璧な作品

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

、それはTeamViewerのがインストールされている正しいパスを取得しますが、これは唯一の私は、Windows XP 32ビットおよびWindows 7 32ビットのためにこの作品を作ることができるどのようにWindows 7の64ビットのために働いています。

EDIT:次のコードを書いて動作しますが、これはおそらく最善の方法ではありませんが、それはそのトリックです。

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

これはどういう意味ですか?レジストリキーとしてRegistryKey = Registry.LocalMachineを指定します。OpenSubKey( "SOFTWARE \ Wow6432Node \ TeamViewer \ Version7"、True) – PandaNL

+0

はい、正確です。実際、 'Option Strict On'と' Option Infer On'が指定されている場合(これは良い考えです)、 'As ...'部分を省略して宣言をより簡潔にすることができます。 –

答えて

1

を持っているdoesntのレジストリで使用しているキー(WOW6432NODE)は反射器です。 64ビットOS上で動作する32ビットアプリケーション用レジストリのビューです。このキーは32ビットシステムには存在せず、OpenSubKey( "SOFTWARE \ Wow6432Node \ TeamViewer \ Version7"、True)が例外をスローする可能性があります。

を参照してください:あなたはInstallationDirectoryでの読み出しには、このアプローチを取る必要があると感じた場合はhttp://msdn.microsoft.com/en-us/library/windows/desktop/ms724072(v=vs.85).aspx

、私は、x86にあなたの実行可能ファイルのビルドプラットフォームを設定し、あなたの必要性を取り除くSOFTWARE \ TeamViewerの\ Version7を経由してキーにアクセスして推薦しますチェック。プラットフォームがx86に設定されている場合、アプリケーションはx64システムで実行されていてもレジストリの32ビットハイブから常に読み取られます。 Windowsは自動的にWow6432Nodeの下でルックアップを処理します。

私の推測では、ターゲットプラットフォームが「任意のCPU」に設定されていることは、基本的にアプリケーションが実行中のプラットフォーム(実行時)を使用してSOFTWARE \ TeamViewer \ Version7がどこから来るのかを判断することを意味します。このシナリオでは、アプリケーションが64ビットシステムで実行されている場合、OpenSubKey( "SOFTWARE \ TeamViewer \ Version7")はレジストリの64ビットバージョンを検索します(したがって、キーを見つけられず、else条件になります)。 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のがインストールされているとinstalldirectory

関連する問題