• Курсы Академии Кодебай, стартующие в мае - июне, от команды The Codeby

    1. Цифровая криминалистика и реагирование на инциденты
    2. ОС Linux (DFIR) Старт: 16 мая
    3. Анализ фишинговых атак Старт: 16 мая Устройства для тестирования на проникновение Старт: 16 мая

    Скидки до 10%

    Полный список ближайших курсов ...

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

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

DDK

Приветствую, господа.

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

Код:
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)
(в кавычки путь взял)

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

Engler

По поводу защиты, если я правильно понял, то Вы имеете ввиду UAC (User Account Control),
то сл. ссылки должны помочь:



 
P

Pasha

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

DDK

Спасибо, буду завтра разбираться и пробовать! Пролистав по-диагонали понял, что вроде то что надо.
 
Статус
Закрыто для дальнейших ответов.
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!