Мне интересно, есть ли способ использовать обычные окна с ярлыками, например, %PROGRAMFILES%, %APPDATA%,....
при использовании System.Diagnostics.Process.Start?
То, что я хочу сделать, это использовать один из этих ярлыков для динамического создания пути, который используется для толкания программы, которую я хочу начать с Process.Start. Пример:
System.Diagnostics.Process.Start("%PROGRAMFILES%\MyApp\MyApp.exe");
Изменение: как комментарий к принятому ответу:
Как было упомянуто в комментариях, я хочу также указать здесь: если решение не работает, так как файл не найден, следует распечатать результат команды System.Environment.ExpandEnvironmentVariables. Может случиться так, что он непреднамеренно указывает на расположение файлов программ x86 вместо местоположения программных файлов (или наоборот) в зависимости от того, установлено ли для самого приложения (свойства проекта) "Предпочитаете 32-разрядную" или целевую платформу. Если это следует учитывать, решение работает довольно хорошо.
Используйте System.Environment.ExpandEnvironmentVariables
чтобы System.Environment.ExpandEnvironmentVariables
выполнить расширение, а затем передать результат Process.Start
:
System.Diagnostics.Process.Start(
System.Environment.ExpandEnvironmentVariables(@"%PROGRAMFILES%\MyApp\MyApp.exe"));
Я почти уверен, что это не сработает, однако в библиотеке.NET есть класс среды, который может вернуть информацию, которую вы ищете.
Наверное, нравится:
// Change the directory to %WINDIR%
Environment.CurrentDirectory = Environment.GetEnvironmentVariable("windir");
Если вы используете "программные файлы", это может сработать (не можете проверить здесь).
Вы можете использовать
Environment.GetFolderPath(System.Environment.SpecialFolder.ProgramFilesX86)'
Чтобы получить путь к специальной папке (в данном случае директории 32-разрядных файлов программ). Там больше в этом классе, который тоже поможет.
Кроме того, я ожидаю, что Process.Start
с нерасширенным путем будет работать нормально, если вы используете UseShellExecute
- оболочка способна самостоятельно расширять пути.
Однако это, вероятно, плохое решение. Что делать, если пользователь установил ваше целевое приложение где-то еще? Вы уверены, что нет лучшего способа получить путь к приложению?