Total Commander Forum Index Total Commander
Форум поддержки пользователей Total Commander
Сайты: Все о Total Commander | Totalcmd.net | Ghisler.com | RU.TCKB
 
 RulesRules   SearchSearch   FAQFAQ   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

Программа не запускается (31)

 
Post new topic   Reply to topic    Total Commander Forum Index -> Общие вопросы printer-friendly view
View previous topic :: View next topic  
Author Message
Plinius



Joined: 29 Oct 2008
Posts: 7
Location: Владимир

Post (Separately) Posted: Tue May 27, 2014 08:26    Post subject: Программа не запускается (31) Reply with quote

Речь пойдёт не об аналогичной ошибке при запуске ярлыков, как подумали некоторые. Smile Речь пойдёт про запуск конкретных исполняемых файлов с расширением exe.

Если подобная тема уже была, то прошу прощения. Тогда пульните в меня нужной ссылкой, потому как по поиску описание данного случая я не нашёл (возможно плохо искал).

Что имеем? Windows 7 x64 SP1. Тотал - официальная версия 8.51а x64, установленная на компьютере. Ещё имеем одну старенькую программу (не суть важно какую), инсталлятор которой запускается программой setup.exe. При попытке запуска указанного файла под Тоталом получаем известное окно ошибки: "Программа не запускается! (31)".

Я сначала не понял в чём дело, т.к. чётко помню, что раньше под Тоталом спокойно запускал эту программу. Действительно, удаляю 8.51a x64 с файлами настроек и устанавливаю также официальный 8.01 x64. Запускаю этот setup.exe - и, о чудо, всё запускается. Сношу 8.01 x64, ставлю обратно 8.51a x64 - опять получаю окно с ошибкой (31). Поменял 64-битную 8.51a на 32-битную. Уже всё стало запускаться. Насчёт 32-разрядной версии 8.50 не скажу, не пробовал, но под 64-битной 8.50 эта программа также не запускалась. В итоге, получается, что моя программа почему-то не очень дружит с последними версиями Тотала разрядности x64.

По данной ситуации у меня вопрос: в новых версиях у меня какие-то неверные настройки 64-битного Тотала или это его глюк? Если кто захочет промоделировать эту ситуацию, то могу скинуть на файлообменник файл setup.exe, на котором вылетает ошибка 31. Если модератор разрешит, то ссылку выложу в теме. Если нет, то дам по запросу в личке. Естественно, при запуске этого файла он ругнётся на отсутствие других установочных файлов, но тут важно другое - либо программа запустится и ругнётся на отсутствие других файлов, либо уже ругнётся сам Тотал, т.е. почему-то не захочет запустить этот файл. Под проводником Windows всё запускается.
Back to top
View user's profile Send private message
Avada



Joined: 01 Aug 2008
Posts: 9724
Location: Россия, Саратов

Post (Separately) Posted: Tue May 27, 2014 08:58    Post subject: Reply with quote

Plinius
Ссылку на файл — мне в личку. В общем виде это обсуждать бессмысленно, надо смотреть конкретно.

Добавлено спустя 56 минут:

Ссылка на файл. Я сам смогу проверить только вечером.
_________________
Даже самая богатая фантазия
Не представит себе наши безобразия.
Back to top
View user's profile Send private message
MVV



Joined: 15 Oct 2009
Posts: 4787
Location: Ростов-Дон

Post (Separately) Posted: Tue May 27, 2014 10:22    Post subject: Reply with quote

Действительно интересно, в 8.50 beta 2 x64 уже не запускается, а в 8.01 x64 ещё запускается.

Ага, полагаю, это связано с этим:
Quote:
14.04.13 Fixed: Do not try to run 16-bit programs from 64-bit TC, they cause a segmentation fault in ShellExecuteEx (64)


Вообще удивлён, что в 64-битной винде запускаются 16-битные экзешники. Был уверен, что 16-битной подсистемы в ней нет вообще (но видимо, это касается только программ под DOS, раз графическая запускается).
_________________
TCFS2 + TCFS2Tools: Полноэкранный режим и многое другое (обсуждение)
WINCMD.RU: AskParam, CopyTree, NTLinks, Sudo, VirtualPanel…
Back to top
View user's profile Send private message
CaptainFlint



Joined: 14 Dec 2004
Posts: 6001
Location: Москва

Post (Separately) Posted: Tue May 27, 2014 14:18    Post subject: Reply with quote

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-битками никакой не обнаружилось, а баг я зарепортил.
_________________
Почему же, ё-моё, ты нигде не пишешь "ё"?
Back to top
View user's profile Send private message
MVV



Joined: 15 Oct 2009
Posts: 4787
Location: Ростов-Дон

Post (Separately) Posted: Tue May 27, 2014 14:45    Post subject: Reply with quote

Да, похоже, инструмент совместимости определяет, что это установщик InstallShield, и запускает системный 32-битный Setup.exe.

А мистику мы не имели возможности обнаружить, т.к. система на самом деле не запускала 16-битный процесс, а запускала вместо него 32-битный. Вот если изменить экзешник, чтобы он по базе не пробивался...

В любом случае, не думаю, что есть смысл полагаться на патчи совместимости при определении, что запускать, а что - нет, уж очень их много, и уж очень они кривые...
_________________
TCFS2 + TCFS2Tools: Полноэкранный режим и многое другое (обсуждение)
WINCMD.RU: AskParam, CopyTree, NTLinks, Sudo, VirtualPanel…
Back to top
View user's profile Send private message
Plinius



Joined: 29 Oct 2008
Posts: 7
Location: Владимир

Post (Separately) Posted: Tue May 27, 2014 15:13    Post subject: Reply with quote

CaptainFlint wrote:
а баг я зарепортил.

Большое спасибо. Smile
Back to top
View user's profile Send private message
Plinius



Joined: 29 Oct 2008
Posts: 7
Location: Владимир

Post (Separately) Posted: Wed May 28, 2014 18:25    Post subject: Reply with quote

Интересное наблюдение.

По пути
Code:
C:\Windows\SysWOW64\InstallShield\

находятся три файла
Code:
setup.exe
_setup.dll
_isdel.exe

Эти же три файла присутствуют в дистрибутиве моей старой программы. Берём, заменяем старые копии файлов из указанного выше каталога новыми - и вуаля - программа запускается под Тоталом 8.51a x64 и к тому же устанавливается корректно. Ловкость рук и никакого мошенничества. Smile
Back to top
View user's profile Send private message
MVV



Joined: 15 Oct 2009
Posts: 4787
Location: Ростов-Дон

Post (Separately) Posted: Wed May 28, 2014 19:05    Post subject: Reply with quote

Plinius,
Ничего интересного, просто более новая версия InstallShield, 32-битная, а не 16-битная.
_________________
TCFS2 + TCFS2Tools: Полноэкранный режим и многое другое (обсуждение)
WINCMD.RU: AskParam, CopyTree, NTLinks, Sudo, VirtualPanel…
Back to top
View user's profile Send private message
CaptainFlint



Joined: 14 Dec 2004
Posts: 6001
Location: Москва

Post (Separately) Posted: Thu May 29, 2014 15:54    Post subject: Reply with quote

Гислер ответил, что это намеренное поведение, исправлять не планируется. Проблема в том, что Тотал не может заранее отличить такой "запускающийся" 16-битный файл от любого другого, а попытка запуска обычной 16-битной программы вызывает падение в системной функции. Поэтому Гислер запретил запуск всех 16-битных приложений из 64-битного Тотала.
_________________
Почему же, ё-моё, ты нигде не пишешь "ё"?
Back to top
View user's profile Send private message
Plinius



Joined: 29 Oct 2008
Posts: 7
Location: Владимир

Post (Separately) Posted: Thu May 29, 2014 18:12    Post subject: Reply with quote

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

Да, в 90-е годы довольно часто делали полностью 32-битные программы, хотя инсталляторы к ним оставались по-прежнему 16-битными. Раньше это было некритично, а сейчас этот момент стал ощущаться.
Back to top
View user's profile Send private message
Flasher



Joined: 06 Nov 2009
Posts: 14229
Location: Москва

Post (Separately) Posted: Thu May 29, 2014 21:11    Post subject: Reply with quote

Plinius
Предлагаю навесить во внутренних ассоциациях запуск exe проводником.
_________________
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Back to top
View user's profile Send private message
MVV



Joined: 15 Oct 2009
Posts: 4787
Location: Ростов-Дон

Post (Separately) Posted: Thu May 29, 2014 22:58    Post subject: Reply with quote

Можно запускать через Exec.exe из комплекта моей виртуальной панели, там как раз 32-битный лаунчер. Ещё можно через Shift+Enter или Ctrl+Enter и Enter.
_________________
TCFS2 + TCFS2Tools: Полноэкранный режим и многое другое (обсуждение)
WINCMD.RU: AskParam, CopyTree, NTLinks, Sudo, VirtualPanel…
Back to top
View user's profile Send private message
Plinius



Joined: 29 Oct 2008
Posts: 7
Location: Владимир

Post (Separately) Posted: Fri May 30, 2014 22:34    Post subject: Reply with quote

MVV wrote:
Ещё можно через Shift+Enter или Ctrl+Enter и Enter.
Да, это быстрый способ. Спасибо за советы. Smile
Back to top
View user's profile Send private message
Display posts from previous:   
Post new topic   Reply to topic    Total Commander Forum Index -> Общие вопросы All times are GMT + 4 Hours
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2005 phpBB Group