[vb.net] Проблема с Shell() на Висте

  • Автор темы DDK
  • Дата начала
Статус
Закрыто для дальнейших ответов.
D
#1
Приветствую, господа.

Сейчас использую такой огород для запуска внешнего приложения:

Код:
Dim s As Integer
Try 
s = Shell(Application.StartupPath() + "\EUU_Vista.exe", AppWinStyle.NormalFocus) 
Catch ex As Exception 
Try 
s = Shell(Application.StartupPath() + "/EUU_Vista.exe", AppWinStyle.NormalFocus) 
Catch ex2 As Exception 

End Try 
End Try
На XP работает всё в любых случаях замечательно. На Висте же возникает две проблемы:
1) Так как по умолчанию StartupPath - это папка %TEMP%, а имена юзерских папок могут иногда содержать такие спецсимволы как ®, © и т.д., то в случае, когда в имени папки юзера содержится подобные знаки, Shell отвечает, что не может найти файл.
2) Если в Висте включена её встроенная жесткая защита (которая еще спрашивает разрешения перед запуском кажлого файла), то огород мой успешно выполняется, моя программа закрывается с чувством выполненного долга, а вот желаемое быть вызванным внешнее приложение так и не запускается.

Есть идеи ?

Проблему со спец. символами в path решил так:
Код:
s = Shell(Chr(34) + Application.StartupPath() + "/EUU_Vista.exe" + Chr(34), AppWinStyle.NormalFocus)
(в кавычки путь взял)

Втоаря проблема с защитой пока актуальна.
 
P

Pasha

#3
DDK
1. Используй System.Diagnostics.Process вместо Shell.
1a. Используй Path.Combine() для построения пути.
2. UAC в висте не "спрашивает разрешения перед запуском файла". Не глуши все исключения (Catch ex2 As Exception), а если глушишь - выводи ex2.ToString() на экран или в лог. И потом уже по тексту смотри что именно исправлять надо.
 
D
#4
Спасибо, буду завтра разбираться и пробовать! Пролистав по-диагонали понял, что вроде то что надо.
 
Статус
Закрыто для дальнейших ответов.