CaptainFlint

|
Posted: Tue May 27, 2014 14:18 Post subject: |
|
|
MVV wrote: | Вообще удивлён, что в 64-битной винде запускаются 16-битные экзешники. Был уверен, что 16-битной подсистемы в ней нет вообще (но видимо, это касается только программ под DOS, раз графическая запускается). |
А они и не запускаются. И неважно, графическая или нет. Например, программа SHED для редактирования SHG-изображений 16-битная и графическая, но не запускается (что ощутимо ударило в своё время по моей работе над русиком Тотала, т. к. интерактивные картинки в HLP-справке сделаны именно в SHG-формате).
А с данным инсталлятором всё обстоит оччень любопытненько. Если его запустить, а потом посмотреть информацию о процессе, будет видно, что на самом деле образ процесса принадлежит файлу C:\Windows\SysWOW64\InstallShield\setup.exe, несмотря на то, что командная строка выглядит следующим образом:
Code: | "C:\Temp\SETUP.EXE" -isw64"C:\Temp\SETUP.EXE" |
Если проследить через Process Monitor, то видно, что запускается именно InstallShield, и что вышеприведённая командная строка является такой сразу же при инициализации процесса. Далее, если посмотреть чуть выше, то обнаруживается, что процесс Тотала (а, вернее, системная библиотека, сидящая в его памяти, через которую Тотал выполняет запуск программ) дёргает файлик C:\Windows\AppPatch\sysmain.sdb, то есть включается механизм обеспечения совместимости приложений. И у меня сильное подозрение, что именно в этом файлике прописан запуск InstallShield'а, если вдруг обнаруживается, что запускаемый файл — инсталлятор, построенный именно на этой технологии (как в нашем случае). В результате винда запускает 32-битный InstallShield, передавая ему наш 16-битный инсталлятор, и никакого запуска 16-битной программы не происходит. Инсталлятор просто распаковывает файл своими средствами.
Резюме: Мистики с 16-битками никакой не обнаружилось, а баг я зарепортил. _________________ Почему же, ё-моё, ты нигде не пишешь "ё"? |
|