Mesartim Ответов: 2

C # запуск программы через ярлык с помощью processstartinfo process


Столкнулся с проблемой запуска программы через ярлык(.LNK)
с помощью ProcessStartInfo Процесс

Получается так что запуская ярлык(.LNK) программы
"C:\Program Files\Notepad++\notepad++.exe" ,
Процесс отказываеться запускать программу.

Если запустить программу по прямому пути
"C:\Program Files\Notepad++\notepad++.exe" ,
Процесс запускает программу.


Перевод:
Столкнулся с проблемой запуска программы через ярлык (.lnk)
использование процесса ProcessStartInfo

Получается, что при запуске ярлыка (.lnk) программы
"C: \ Program Files \ Notepad ++ \ notepad ++. Exe",
Процесс отказывается запускать программу.

Если вы запускаете программу прямым способом
"C: \ Program Files \ Notepad ++ \ notepad ++. Exe",
Процесс запускает программу.

Что я уже пробовал:

В качестве альтернативы запуска был использован АИМП.
Процесс запускает программу как через ярлык(.LNK) так и по прямому пути
"C:\Program файлы (x86)\AIMP\AIMP.exe"


procStart.7z архивов / Облако Mail.ru[^]

procStart.С 7z — Яндекс.Диск[^]


Перевод:
AIMP был использован в качестве альтернативы для запуска.
Процесс запускает программу как через ярлык (.lnk), так и по прямому пути
"C: \ Program Files (x86) \ AIMP \ AIMP.exe"

ZurdoDev

Английский

Maciej Los

Это английский форум. Пожалуйста, говорите по-английски.
Кстати: никто не хотел бы скачивать подозрительные файлы.

Mesartim

"Кстати: никто не хотел бы загружать подозрительные файлы."
Зачем тогда вам нужны антивирусные программы, если вы боитесь их скачивать. Было бы еще удобнее Просмотреть код, скачав исходный код и открыв его в студии.

2 Ответов

Рейтинг:
1

Maciej Los

Попробовать это:

Process proc = new Process();
proc.StartInfo.FileName = @"c:\myShortcut.lnk";
proc.UseShellExecute = false;
proc.Start();


Pete O'Hanlon

Мой 5-й

Maciej Los

- Спасибо, Пит.

Рейтинг:
0

Mesartim

Цитата:
По-видимому, процесс не может отличить расположение файла, если вы запускаете программу через ярлык (.lnk)
Потому что с помощью пути к файлу "C: \ Program Files" в ярлыке (.lnk) в системе x64
Процесс вернет значение "C: \ Program Files (x86)" и выдаст ошибку "указанный путь не существует."
что не отображается в сообщении для ярлыка processInfo.ErrorDialog = true;
img-2020-05-28-08-30-40.png — Яндекс.Диск[^]


string program_files_folder = Environment.Is64BitProcess ?
    Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles) :
    Environment.GetEnvironmentVariable("ProgramW6432");
string programFilesX86 = Environment.GetFolderPath(Environment.SpecialFolder.ProgramFilesX86);