none
Баг с символическими ссылками в ShellExecute в Windows 8.1 RRS feed

  • Вопрос

  • Баг с символическими ссылками в ShellExecute в Windows 8.1:

    Win8.1 при выполнении ShellExecute разыменовывает символические ссылки на файлы при их открытии.

    Т.е. создаю файл, на него создаю символическую ссылку, пытаюсь открыть файл через созданную ссылку - ассоциированному приложению в качестве параметра передаётся не имя ссылки, как в более ранних версия Windows, а имя цели.

    Пример:
    открываю командную строку от админа, выполняю следующие команды:

    echo 1>1.txt 
    mklink 2.txt 1.txt 
    2.txt 


    В Win8.1 открывается блокнот, в котором открыт файл "1.txt", а не "2.txt" (в заголовке окна видим имя открытого файла).

    Не важно, как открывать - через окно проводника или в командной строке по имени файла. Когда Windows запускает ассоциированное с данным типом файла приложение, то она передаёт этому приложению разыменованное имя файла, а не имя ссылки.

    При этом в диспетчере задач видно, что в командной строке блокноту в качестве параметра было передано именно "1.txt", а не "2.txt" - если самому вызвать в командной строке блокнот с именем ссылки, то блокнот откроет файл именно по ссылке:

    notepad 2.txt

    - откроет в блокноте файл по ссылке "2.txt" (видно в заголовке окна и в командной строке запущенного блокнота).

    В более ранних версиях (Висте, 7-ке, вероятно и в 8-ке и в соответствующих им серверных) ассоциированному приложению передаётся имя ссылки, как и должно быть.

    У меня исторически используется один батник с кучей символических ссылок на него и батник по вызванному имени определяет, что от него требуется ("unix-style"). Так вот, в проводнике Win 8.1, при запуске по разным символическим ссылкам, батник всё время запускается с одним ("родным") именем и всё перестало работать, естественно.
    А вот при вызове из командной строки всё работает - CMD сам, видимо, обрабатывает запуск "своих" CMD-файлов и не использует для этого вызов ShellExecute.

    Кстати, ещё об одном баге, вероятно связанном с описываемым, сообщалось ещё в конце прошлого года:

    "ShellExecuteW w/ symlinks broken on Windows 8.1" (вставить ссылку пока не разрешают, по названию тема легко находится)

    но реакции, похоже, пока нет.


    И вот в чём вопрос, собственно - что нужно сделать, чтобы данный баг приняли и исправили?

    15 августа 2014 г. 5:58

Ответы

Все ответы

  • Из последнего ответа в теме про первый баг:

    If you've not already done so, I suggest that you report the bug on
    the Visual Studio connect site:
    https://connect.microsoft.com/VisualStudio

    Even though Windows doesn't strictly accept bug reports through
    Connect, the folks there will often forward them on.

    • Предложено в качестве ответа Elina Lebedeva 18 августа 2014 г. 11:11
    • Помечено в качестве ответа Elina Lebedeva 19 августа 2014 г. 5:54
    15 августа 2014 г. 13:28
  • Я попытаюсь. Но это уже не первое место по счёту, где я пытаюсь это сделать. И проблема в том, что в указанном месте нет специализированной темы по багам Windows. Вероятно, следовало изначально репортить проблему на native Windows language. Причём проблема, скорее всего, всего лишь в одном лишнем или неподходящем системном вызове и нескольких строках кода максимум.

    Но совет имеет смысл - в указанной теме "тусуются" разработчики и они имеют представление в чём именно проблема и, возможно, имеют знакомства или связи для донесения этой проблемы в базовой функциональности системы до лиц, которые могут поспособствовать её исправлению.

    Впрочем, на данный момент у меня перед глазами тема про первый репорт о связанном с моей темой баге (мне так кажется) и положительных результатов я не вижу. И именно в данный момент я не могу о нём сообщить по программе "Software assurance". Это плохо, потому что это может повлиять на выбор версий ПО Microsoft и возможных апгрейдах, которые моя организация будет использовать.

    И мне жаль моего времени, честно говоря, которое я трачу на дебаг и попытки сообщить об элементарном баге в ущерб основным своим обязанностям.


    • Изменено Dark.Diver 15 августа 2014 г. 22:42
    15 августа 2014 г. 22:39
  • Это понятно. Но тут точно разработчики не тусуются, поэтому помочь вам трудно )
    18 августа 2014 г. 6:00