Запуск приложения с использованием ярлыков (% PROGRAMFILES%)

1

Мне интересно, есть ли способ использовать обычные окна с ярлыками, например, %PROGRAMFILES%, %APPDATA%,.... при использовании System.Diagnostics.Process.Start?

То, что я хочу сделать, это использовать один из этих ярлыков для динамического создания пути, который используется для толкания программы, которую я хочу начать с Process.Start. Пример:

System.Diagnostics.Process.Start("%PROGRAMFILES%\MyApp\MyApp.exe");

Изменение: как комментарий к принятому ответу:

Как было упомянуто в комментариях, я хочу также указать здесь: если решение не работает, так как файл не найден, следует распечатать результат команды System.Environment.ExpandEnvironmentVariables. Может случиться так, что он непреднамеренно указывает на расположение файлов программ x86 вместо местоположения программных файлов (или наоборот) в зависимости от того, установлено ли для самого приложения (свойства проекта) "Предпочитаете 32-разрядную" или целевую платформу. Если это следует учитывать, решение работает довольно хорошо.

Теги:

3 ответа

2
Лучший ответ

Используйте System.Environment.ExpandEnvironmentVariables чтобы System.Environment.ExpandEnvironmentVariables выполнить расширение, а затем передать результат Process.Start:

System.Diagnostics.Process.Start(
    System.Environment.ExpandEnvironmentVariables(@"%PROGRAMFILES%\MyApp\MyApp.exe"));
  • 0
    попробовал, но не сработало (пробовал ту же строку, которую я использовал в проводнике Windows и работал)
  • 0
    Не уверен, что сказать - и я не знаю, что означает "не работает" - ExpandEnvironmentVariables работает для меня. Вы уверены, что он указывает на правильную папку с программными файлами (т.е. вы используете эту 32-битную папку, где вам нужна 64-битная папка)?
Показать ещё 9 комментариев
0

Я почти уверен, что это не сработает, однако в библиотеке.NET есть класс среды, который может вернуть информацию, которую вы ищете.

Наверное, нравится:

// Change the directory to %WINDIR%                         
Environment.CurrentDirectory = Environment.GetEnvironmentVariable("windir");        

Если вы используете "программные файлы", это может сработать (не можете проверить здесь).

0

Вы можете использовать

Environment.GetFolderPath(System.Environment.SpecialFolder.ProgramFilesX86)'

Чтобы получить путь к специальной папке (в данном случае директории 32-разрядных файлов программ). Там больше в этом классе, который тоже поможет.

Кроме того, я ожидаю, что Process.Start с нерасширенным путем будет работать нормально, если вы используете UseShellExecute - оболочка способна самостоятельно расширять пути.

Однако это, вероятно, плохое решение. Что делать, если пользователь установил ваше целевое приложение где-то еще? Вы уверены, что нет лучшего способа получить путь к приложению?

  • 0
    В результате использования UseShell возникла та же ошибка, о которой я упоминал выше в ответе переменных расширения. Может ли быть так, что это не работает, потому что я не в английской среде (таким образом, не английские окна)?

Ещё вопросы

Сообщество Overcoder
Наверх
Меню