Неверный файл подключения при запуске RDP из приложения VB (некоторые работают, некоторые нет)

У меня есть приложение VB Express 2010, которое позволяет пользователям выбирать отель, которым мы управляем, из базы данных. Это база данных доступа. Затем он отображает всю информацию об отеле.

Все работает хорошо. Кроме! ссылка на РДП. Все RDP хранятся в общедоступной корневой папке на нашем общем сетевом диске. Путь к файлу для каждого — это столбец в базе данных. Я поместил метку, чтобы проверить правильность пути к файлу. Затем я спрятал метку и использовал ее свойство text для вызова сеанса RDP. Большинство подключений просто запускают RDP, но некоторые говорят

«Указан НЕДЕЙСТВИТЕЛЬНЫЙ ФАЙЛ СОЕДИНЕНИЯ (последняя часть имени. RDP)».

Вот немного кода:

RDPtext — это метка, которая показывает (если не скрыта) путь к файлу, полученному из базы данных.

 If RDPtext.Text = "" Then
        MessageBox.Show("This Property Uses A Different Connection Method" & vbCrLf & "Check SHAREPOINT DOCUMENTATION for more info.", "Site Does Not Use RDP")
 Else
        Shell("C:\Windows\System32\mstsc.exe " & RDPtext.Text, vbMaximizedFocus)
 End If

Путь к файлу - это все та же папка, просто разные RDP. Путь может быть

S:\shared\MyProgram\RDPs\NAMEofRDP.RDP

опять какая-то работа, а какая-то ошибка.


person DaveyLions    schedule 27.09.2013    source источник
comment
Я бы добавил чек на файл: IF system.io.file.exists(RDPtext.Text) then.... Возможно, что-то не так с отображением или небольшая разница, которую нелегко обнаружить визуально.   -  person Steve    schedule 28.09.2013
comment
Вы пытались вручную использовать файл RDP? Возможно, это старая версия, которая не работает с текущим клиентом.   -  person Steve    schedule 28.09.2013
comment
Спасибо за ответы. RDP отлично работает, когда вы щелкаете его вне программы. а что касается пути, я удерживал SHIFT и нажимал КОПИРОВАТЬ КАК ПУТЬ и вставлял его прямо в базу данных доступа (конечно, удаляя кавычки). S:\MyProgram\RDP's\Hanover TS.RDP ‹ --- вот так. Даже изменил имя RDP, работающего с программой, чтобы оно совпадало с именем нерабочего (и переименовало нерабочее во что-то другое), чтобы проверить, был ли это настоящий RDP, и он не работал. Я чувствую, что это как-то связано с путем, но я не знаю, что это может быть, кроме, может быть, длины на несколько слов.   -  person DaveyLions    schedule 28.09.2013
comment
Ах, проблема в пробелах. Бьюсь об заклад, это работает на тех, у кого нет пробелов в имени, а не на других. Дайте мне знать, если это правда.   -  person Steve    schedule 28.09.2013
comment
Теперь я вижу, что вы используете оболочку, попробуйте вместо этого использовать process.start. это должно решить вашу проблему.   -  person Steve    schedule 28.09.2013
comment
Спасибо, Стив. Это работает на некоторых с пробелами. У меня была такая же мысль, а потом я еще больше запутался! Я никогда не использовал process.start, могу ли я побеспокоить вас для быстрого примера? И большое спасибо за ваше время!   -  person DaveyLions    schedule 28.09.2013


Ответы (1)


Попробуйте это вместо оболочки:

Process.Start("C:\Windows\System32\mstsc.exe", RDPtext.Text)

Вы можете продолжать использовать оболочку, если хотите, но вам нужно сделать что-то вроде этого, чтобы заставить ее работать:

Shell("C:\Windows\System32\mstsc.exe """ & RDPtext.Text & """", vbMaximizedFocus)
person Steve    schedule 27.09.2013
comment
Все еще выдает то же исключение :( - person DaveyLions; 28.09.2013
comment
КОМАНДА ОБОЛОЧКИ с дополнительным РАБОТАЛА!!! Ты жжешь! Но теперь мой последний вопрос: ПОЧЕМУ? ПОЧЕМУ это работает? Кстати, я хотел бы дать вам голос. У меня почти 15 репутации. Я должен тебе! - person DaveyLions; 28.09.2013
comment
Возможно, вам также придется сделать все дополнительные кавычки с помощью Process.Start. Это работает, потому что вы создаете строку для отправки в оболочку, которая просто вызывает другой exe. Затем этот exe принимает все после него в качестве аргумента. Каждый пробел начинает новый аргумент, если вы не заключаете его в кавычки. - person Steve; 28.09.2013
comment
IE, Text.exe 1 c:\ 1/2/2013 дает test.exe 3 аргумента. Можно подумать, что Text.exe 1 c:\Some Thing Else 1/2/2013 имеет 5 аргументов. Итак, чтобы исправить это, мы делаем это Text.exe 1 "c:\Some Thing Else" 1/2/2013 и возвращаемся к 3 аргументам. - person Steve; 28.09.2013
comment
АХХАА. Потрясающий! Спасибо большое! - person DaveyLions; 28.09.2013