DirectoryInfo - шиза на ровном месте
От: Baiker  
Дата: 20.03.23 11:33
Оценка: -4 :))) :))) :)
Делюсь интересным багом, грабли которого M$ услужливо разложила в системе.
Код самый простой — тупо вывести последнюю модификацию каталога:

var di = new DirectoryInfo(@"C:\Windows\System32");
Log.Trace("Modif: " + di.LastWriteTime);


И код в принципе работает! Но... в одной проге он выдаёт "20/3/2023 09:58:51", а в другой — "24/2/2023 02:02:05"!!!
Т.е. это даже не игры с часовым поясом, а отставание на целый месяц! Откуда такая разница?

  Всё просто — "медвежья помощь" мелкософта!
Оказывается, одна прога была с prefer 32 bit, а другая без (обе AnyCPU). В результате, вместо нормального C:\Windows\System32 дридцатидвухбитной проге венда подсовывала c:\Windows\SysWOW64 ! Спасибо, обезьяны! Два часа отладки долой.


Я не знаю, насколько "переход на 64 бита" был тяжел для мелкософта, но вот это "c:\Program Files\", "c:\Program Files (x86)\", "C:\Windows\System32", "c:\Windows\SysWOW64" — маразм чистой воды и ГРАБЛИ на всю оставшуюся жизнь. Только придурок мог так "изящно" замаскировать венду для 32-битных прог.
Короче, программируйте и оглядывайтесь, не прилетит ли вам очередным граблями в лобешник!
Re: DirectoryInfo - шиза на ровном месте
От: Ночной Смотрящий Россия  
Дата: 20.03.23 13:37
Оценка: +1
Здравствуйте, Baiker, Вы писали:

B>Оказывается, одна прога была с prefer 32 bit, а другая без (обе AnyCPU). В результате, вместо нормального C:\Windows\System32 дридцатидвухбитной проге венда подсовывала c:\Windows\SysWOW64 !


Это вполне известное поведение, еще со времен 64-битной ХР. Странно что ты не знал. Куда интереснее почему у тебя при этом было разное время.
... << RSDN@Home 1.3.17 alpha 5 rev. 62>>
Re: DirectoryInfo - шиза на ровном месте
От: Sharowarsheg  
Дата: 20.03.23 14:03
Оценка: +3 -1
Здравствуйте, Baiker, Вы писали:

B>Я не знаю, насколько "переход на 64 бита" был тяжел для мелкософта, но вот это "c:\Program Files\", "c:\Program Files (x86)\", "C:\Windows\System32", "c:\Windows\SysWOW64" — маразм чистой воды и ГРАБЛИ на всю оставшуюся жизнь. Только придурок мог так "изящно" замаскировать венду для 32-битных прог.


Если тебе нужно зачем-то System32, то почему ты не в курсе такого поведения, которому уже лет десять точно? Тогда, когда это первый раз пошло, об этом кричали на всех сайтах, да и может даже в мегафон на оживлённых перекрёстках. Давно уже подразумевается, что все и так знают. А если тебе не нужно System32, то и не тереби его.
Re: DirectoryInfo - шиза на ровном месте
От: _NN_ www.nemerleweb.com
Дата: 20.03.23 20:37
Оценка: +6 :)
Здравствуйте, Baiker, Вы писали:

Не смог пройти мимо: 64-битная Windows — это очень просто!
Автор: Torie
Дата: 20.08.10
.
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re: DirectoryInfo - шиза на ровном месте
От: Xander Zerge Россия www.zerge.com
Дата: 20.03.23 21:00
Оценка: +2 -1
Здравствуйте, Baiker, Вы писали:

B>Оказывается, одна прога была с prefer 32 bit, а другая без (обе AnyCPU). В результате, вместо нормального C:\Windows\System32 дридцатидвухбитной проге венда подсовывала c:\Windows\SysWOW64 ! Спасибо, обезьяны! Два часа отладки долой.


Это не баг, а обратная совместимость для всяких 32-битных программ, которые по прямому пути в C:\Windows\System32 лезут. Так они хотя бы имеют шанс получить желаемое, а без подсовывания SysWOW64 — шансов нет.
Серёжа Новиков,
программист
Re: DirectoryInfo - шиза на ровном месте
От: vaa  
Дата: 21.03.23 07:35
Оценка: +1
Здравствуйте, Baiker, Вы писали:

B>Делюсь интересным багом, грабли которого M$ услужливо разложила в системе.

B>Код самый простой — тупо вывести последнюю модификацию каталога:

B>
B>var di = new DirectoryInfo(@"C:\Windows\System32");
B>Log.Trace("Modif: " + di.LastWriteTime);
B>


B>И код в принципе работает! Но... в одной проге он выдаёт "20/3/2023 09:58:51", а в другой — "24/2/2023 02:02:05"!!!

B>Т.е. это даже не игры с часовым поясом, а отставание на целый месяц! Откуда такая разница?

Так точно!
dotnet\sdk\7.0.202
C:\tmp\test>dotnet run -r win-x64                                                                                                                                                                                            

Modif: 21.03.2023 10:11:08                                                                                                                                                                                                                                                                                                                                                                                                                                                               

C:\tmp\test>dotnet run -r win-x86                                                                                                                                                                                                            

Modif: 15.03.2023 18:03:50


Поэтому я стараюсь избегать системных директорий и привилегий.

Environment.GetFolderPath(Environment.SpecialFolder.SystemX86);;
val it: string = "C:\Windows\SysWOW64"

Environment.GetFolderPath(Environment.SpecialFolder.System);;
val it: string = "C:\Windows\system32"
☭ ✊ В мире нет ничего, кроме движущейся материи.
Re: DirectoryInfo - шиза на ровном месте
От: vsb Казахстан  
Дата: 21.03.23 07:39
Оценка: +1
Я ничего не понял. Из-за чего ошибка-то?
Re[2]: DirectoryInfo - шиза на ровном месте
От: night beast СССР  
Дата: 21.03.23 07:52
Оценка: 14 (1) +2 -1
Здравствуйте, vsb, Вы писали:

vsb>Я ничего не понял. Из-за чего ошибка-то?


есть предположение, что на разных версиях он пытается получить информацию по разным директориям, но ТС, как обычно, много рассказывал какие все м-ки, но внятно выразить суть проблемы не смог.
Отредактировано 21.03.2023 7:53 night beast . Предыдущая версия .
Re[2]: DirectoryInfo - шиза на ровном месте
От: Baiker  
Дата: 21.03.23 09:03
Оценка:
Здравствуйте, Ночной Смотрящий, Вы писали:

НС>Здравствуйте, Baiker, Вы писали:


B>>Оказывается, одна прога была с prefer 32 bit, а другая без (обе AnyCPU). В результате, вместо нормального C:\Windows\System32 дридцатидвухбитной проге венда подсовывала c:\Windows\SysWOW64 !


НС>Это вполне известное поведение, еще со времен 64-битной ХР


Известное, да только очень узкому кругу товарищей! Либо админам после спец.курсов, либо бедолагам с шишкой на лбу.

НС> Странно что ты не знал


АБСОЛЮТНО ничего странного! Где тебе винда открытым текстом говорит, что System32 — это не System32?? Так что не выпендривайся, далеко не все обязаны знать крючкотворства вендолабателей. Программисты — тем более, МЫ НЕ АДМИНЫ, чтобы это знать.

НС> Куда интереснее почему у тебя при этом было разное время.


Не У МЕНЯ, а у микрософта! Простая догадка: "замаскировать" папку они замаскировали, да только РАБОТУ с этой папкой оставили на "обычном" уровне — т.е. когда пишут в system32, вторую папку даже не касаются. Отсюда и баги. Т.е. даже на этом уровне "маскировка" получилась халтура.
Re[3]: DirectoryInfo - шиза на ровном месте
От: Ночной Смотрящий Россия  
Дата: 21.03.23 09:08
Оценка: +1
Здравствуйте, Baiker, Вы писали:

B>>>Оказывается, одна прога была с prefer 32 bit, а другая без (обе AnyCPU). В результате, вместо нормального C:\Windows\System32 дридцатидвухбитной проге венда подсовывала c:\Windows\SysWOW64 !

НС>>Это вполне известное поведение, еще со времен 64-битной ХР
B>Известное, да только очень узкому кругу товарищей!

Я бы так не сказал.

B>АБСОЛЮТНО ничего странного! Где тебе винда открытым текстом говорит, что System32 — это не System32??


https://learn.microsoft.com/en-us/windows/win32/winprog64/file-system-redirector

НС>> Куда интереснее почему у тебя при этом было разное время.

B>Не У МЕНЯ, а у микрософта!

Судя по отсутствию аналогичных ситуаций в гугле — с большой вероятностью все же у тебя.
... << RSDN@Home 1.3.17 alpha 5 rev. 62>>
Re[2]: DirectoryInfo - шиза на ровном месте
От: Baiker  
Дата: 21.03.23 09:09
Оценка:
Здравствуйте, Sharowarsheg, Вы писали:

S>Если тебе нужно зачем-то System32, то почему ты не в курсе такого поведения


Потому что я НЕ АДМИН?? Ты же тоже не всё в жизни знал, когда лез впервые пробовать? Люди варят пельмени в холодной воде не потому, что тупые — просто такая инфа весьма специальная, узнаёшь только после прилетания грабель. Мне интересно другое — наколько надо быть самодовольным пижоном, чтобы вместо осуждения маразматического технического решения наезжать на людей, что это ещё ОНИ виноваты, что не знали придурошных "трюков" микросовта "как спрятать венду от 32 бит".
Вообще-то у M$ (как полного владельца ОС) была тысяча вариантов, как аккуратно модернизировать ОС без необходимости прибегания к трюкам "вот вам каталог, только это совсем не этот каталог" (как и с registry, кстати). Но M$ пошла своим любимым самым гадостным путём — "делать вид, что всё по-старому". По этой же причине они эмулировали баги(!) предыдущей версии, чтобы игрушки не падали в новой венде. Это уже вообще днище технических решений.
Re[2]: DirectoryInfo - шиза на ровном месте
От: Baiker  
Дата: 21.03.23 09:11
Оценка:
Здравствуйте, Xander Zerge, Вы писали:

XZ>Здравствуйте, Baiker, Вы писали:


B>>Оказывается, одна прога была с prefer 32 bit, а другая без (обе AnyCPU). В результате, вместо нормального C:\Windows\System32 дридцатидвухбитной проге венда подсовывала c:\Windows\SysWOW64 ! Спасибо, обезьяны! Два часа отладки долой.


XZ>Это не баг, а обратная совместимость для всяких 32-битных программ


Категорически не согласен. Было бы ВРЕМЯ ОДИНАКОВОЕ, тогда да — "совместимость". На деле "маскировочный" SysWOW64 работает независимо, что и показала практика.
Re[2]: DirectoryInfo - шиза на ровном месте
От: Ночной Смотрящий Россия  
Дата: 21.03.23 09:11
Оценка: +1 -1
Здравствуйте, vsb, Вы писали:

vsb>Я ничего не понял. Из-за чего ошибка-то?


Ему зачем то понадобилась дата модификации каталога system32 и он в 2023 году с удивлением для себя обнаружил, что в режиме эмуляции 32-х бит винда использует другой system32 с 32-хбитными версиями системных dll.
... << RSDN@Home 1.3.17 alpha 5 rev. 62>>
Re[2]: DirectoryInfo - шиза на ровном месте
От: Baiker  
Дата: 21.03.23 09:17
Оценка: 1 (1)
Здравствуйте, vaa, Вы писали:

vaa> Так точно!

vaa>dotnet\sdk\7.0.202

Как я понял, от версии дотнета ничего не зависит — тут ошибка аж на системном уровне. Но спасибо, что проверил!

vaa>Поэтому я стараюсь избегать системных директорий и привилегий.

vaa>Environment.GetFolderPath(Environment.SpecialFolder.SystemX86)

Дак в этом и прелесть дотнета, что мы максимально абстрагируемся от низлежащей ОС! Даже 32/64 НЕ ДОЛЖНЫ быть никогда нашим "головняком"! Не говоря о позорной венде, где ещё и "мир 32-битов" живёт отдельной жизнью. Венде практически НИЧЕГО не стоило распознавать старые проги и запускать в соотв. окружении, зачем было городить "Program Files(x86)"?? Да ещё и с тупорылым ПРОБЕЛОМ, перепортившим жизнь ещё тысячам прог, которые просто не понимают, как в пути может быть пробел! (который во всех операционках был разделителем аргументов) Ладно, чо уж. От M$ разве можно ожидать интеллектуальных решений!
Re[2]: DirectoryInfo - шиза на ровном месте
От: Baiker  
Дата: 21.03.23 09:20
Оценка:
Здравствуйте, _NN_, Вы писали:

_NN>Не смог пройти мимо: 64-битная Windows — это очень просто!


)))))))) ВОТ ВОТ!! Всё просто — рассмотрите это большую кучу грабель и просто проедьте по ней на велосипеде! Спасибо, NN! Вот лучшее объяснение "как можно не знать о "хитрых" 64 битах венды". Да всё просто! Мы — программисты, наша главная задача — алгоритмы. Низлежащий мусор — лишь проекция реальности.
Re[3]: DirectoryInfo - шиза на ровном месте
От: Философ Ад http://vk.com/id10256428
Дата: 21.03.23 09:23
Оценка: +4 -1
Здравствуйте, Baiker, Вы писали:

S>>Если тебе нужно зачем-то System32, то почему ты не в курсе такого поведения

B>Потому что я НЕ АДМИН??

а чего ты тогда в System32 полез?
Всё сказанное выше — личное мнение, если не указано обратное.
Re[3]: DirectoryInfo - шиза на ровном месте
От: Ночной Смотрящий Россия  
Дата: 21.03.23 09:24
Оценка: +2 -1
Здравствуйте, Baiker, Вы писали:

B>Потому что я НЕ АДМИН??


При чем тут админ? Эту особенность исполнения 32-хбитных программ в 64 битной венде должен программист знать должен.

B> Ты же тоже не всё в жизни знал, когда лез впервые пробовать?


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

B>Вообще-то у M$ (как полного владельца ОС) была тысяча вариантов, как аккуратно модернизировать ОС без необходимости прибегания к трюкам "вот вам каталог, только это совсем не этот каталог"


Например?
... << RSDN@Home 1.3.17 alpha 5 rev. 62>>
Re[3]: DirectoryInfo - шиза на ровном месте
От: Ночной Смотрящий Россия  
Дата: 21.03.23 09:24
Оценка: -1
Здравствуйте, Baiker, Вы писали:

B>Категорически не согласен. Было бы ВРЕМЯ ОДИНАКОВОЕ, тогда да — "совместимость". На деле "маскировочный" SysWOW64 работает независимо, что и показала практика.


Он и должен работать независимо, это другой каталог с другими файлами. То что ты зачем то заточил логику на время последнего обновления system32 — твоя проблема.

У тебя, кстати, в твоем коде таки и написано константой, @"C:\Windows\System32"?
... << RSDN@Home 1.3.17 alpha 5 rev. 62>>
Re[2]: DirectoryInfo - шиза на ровном месте
От: Baiker  
Дата: 21.03.23 09:27
Оценка:
Здравствуйте, vsb, Вы писали:

vsb>Я ничего не понял. Из-за чего ошибка-то?


Цитирую самое важное. Во второй раз уж точно дойдёт:

вместо нормального C:\Windows\System32 дридцатидвухбитной проге венда подсовывала c:\Windows\SysWOW64

Re: DirectoryInfo - шиза на ровном месте
От: Философ Ад http://vk.com/id10256428
Дата: 21.03.23 09:28
Оценка: +3 -1
Здравствуйте, Baiker, Вы писали:

B>
B>var di = new DirectoryInfo(@"C:\Windows\System32");
B>Log.Trace("Modif: " + di.LastWriteTime);
B>


У тебя в боевом коде так и написано? Захардкожен путь к @"C:\Windows\System32"?
Всё сказанное выше — личное мнение, если не указано обратное.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.