VB.NET Получение пути к файлу приложения TeamViewer - PullRequest
0 голосов
/ 25 января 2012

В моем приложении люди могут подключаться к удаленному компьютеру с помощью 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

Ответы [ 2 ]

1 голос
/ 26 января 2012

Ключ, который вы используете (Wow6432Node), является отражателем; это представление реестра для 32-битных приложений, работающих на 64-битной ОС. Этот ключ не будет существовать в 32-битных системах, и ваш OpenSubKey ("SOFTWARE \ Wow6432Node \ TeamViewer \ Version7", True) может выдать исключение.

См .: http://msdn.microsoft.com/en-us/library/windows/desktop/ms724072(v=vs.85).aspx

Если вы чувствуете, что должны использовать этот подход для чтения InstallationDirectory, я бы порекомендовал установить платформу сборки вашего исполняемого файла на x86 и получить доступ к ключу через SOFTWARE \ TeamViewer \ Version7, устраняя необходимость в вашей проверке. Когда платформа установлена ​​на x86, приложение ВСЕГДА читает из 32-битного куста реестра, даже если оно работает в системе x64. Windows позаботится о том, чтобы поиск выполнялся автоматически под узлом Wow6432Node.

Я предполагаю, что ваша целевая платформа установлена ​​на «Любой ЦП», что в основном означает, что приложение будет использовать исполняющую платформу (во время выполнения), чтобы определить, откуда на самом деле берется местоположение для ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ \ TeamViewer \ Version7. В этом сценарии, когда ваше приложение работает в 64-битной системе, OpenSubKey («SOFTWARE \ TeamViewer \ Version7») будет искать 64-битную версию реестра (таким образом, не найдя ключ и не перейдя в ваше условие else). Когда приложение запускается в 32-битной системе с использованием OpenSubKey («ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ \ TeamViewer \ Version7»), оно действительно найдет значение, потому что нет 64-битной версии реестра.

Хорошее обсуждение 'Any CPU' и x86 смотрите:

http://blogs.msdn.com/b/rmbyers/archive/2009/06/09/anycpu-exes-are-usually-more-trouble-then-they-re-worth.aspx

0 голосов
/ 26 января 2012

что произойдет, если teamviewer получит новую версию, отличную от 7?

Не лучше сначала определить версию Windows, чтобы вы могли решить, что проверять?

если я нажму кнопку, чтобы запустить teamviewer из приложения, и у меня не будет установлен teamviewer? Вы проверяли это?

У меня установлен teamviewer, а в реестре отсутствует каталог установки

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...