Войти

Показать полную графическую версию : Запуск из контекстного меню - крах х64 оболочки запуска


gora
21-03-2013, 14:52
Прошу помощи в поиске причин и возможных решений

Проблема:
Я создаю в контекстном меню пункт "Запустить с параметрами (Test) ..." для запуска exe файлов с параметрами. Но в некоторых случаях такой запуск приводит к краху оболочки из которой он произведен.
Тестировал запуск из Total Commander (далее ТС) обеих разрядностей (х64 и х86) и Explorer. Крах наблюдается только в х64 приложениях и ни когда в х86, хотя файлы используются одни и те же. Если запуск произведен из контекстного меню в оболочке, то крашится оболочка, если из TC, то крашится ТС.
При запуске из батника (выполняется та же самая команда запуска vbs скрипта, что и из контекстного меню) или самого vbs скрипта краха не наблюдается.
Удалось выяснить, что крах вызывает определенная команда в exe файле. У меня это SFX - установщик архиватора 7-zip с батником внутри. В батнике есть команда для удаления ранее установленных версий архиватора:
For /L %%i In (20,1,%numF%) Do MsiExec /qn /x{23170F69-40C1-270%dI%-09%%i-000001000000} подробнее можно посмотреть в самом батнике (setup7z.cmd) исходники все прикреплены.
При отработке именно этой команды и происходит крах. Если удалять нечего (нет установленного 7-zip), то команда отрабатывает вхолостую без ошибок.

Все, что может потребоваться для тестов, я прикрепил в архиве.
Source\ - папка с исходниками
AllInOne.vbs - собственно скрипт, запускаемый из контекстного меню
Install.exe - дополнительный файл для добавления в реестр записей о создаваемом пункте контекстного меню. Он же их может удалить, при необходимости, после тестов.
startBat.bat - дополнительный батник для запуска AllInOne.vbs не через контекстное меню, но выполняющий аналогичную команду запуска vbs скрипта, как и из контекстного меню
7zipArch.exe - "подопытный кролик" инсталлятор архиватора 7-zip версии 9.20.

1 Архив нужно распаковать на х64 системе в любое удобное место (лучше в корень любого диска).
2 Запустить Install.exe, для добавления пункта в контекстное меню
3 Далее запускать 7zipArch.exe из контекстного меню, вводит в окно ключ -ai0 (других файл не примет) и, наблюдая за происходящим, попытаться решить проблему.

После запуска 7zipArch.exe работу батника можно видеть в консольном окне. После упомянутой выше строки в нем стоит Pause и нужно нажать любую клавишу для продолжения установки архиватора.

Буду благодарен за любую помощь.

Ссылка на архив (https://dl.dropbox.com/u/35142695/test_run_context_sl2_130321_14-12.7z)

Petya V4sechkin
21-03-2013, 20:28
Если запуск произведен из контекстного меню в оболочке, то крашится оболочка, если из TC, то крашится ТС
Давайте посмотрим дампы процессов:
скачайте утилиту ProcDump (http://technet.microsoft.com/en-us/sysinternals/dd996900) и распакуйте в отдельную папку, например C:\ProcDump;
запустите командную строку (cmd.exe) от имени Администратора (http://www.oszone.net/4331#5) и выполните:
C:\ProcDump\procdump.exe -accepteula -e explorer.exe C:\ProcDump\
для Explorer и
C:\ProcDump\procdump.exe -e -w totalcmd.exe C:\ProcDump\
для TC;
вызовите сбой Explorer и TC;
выложите сохраненные DMP-файлы из папки C:\ProcDump в архиве на любой файлообменник.

gora
21-03-2013, 21:08
выложите сохраненные DMP-файлы из папки C:\ProcDump »
Файлы в ней не создались. Вот вывод в консольном окне:
Microsoft Windows [Version 6.1.7601]
(c) Корпорация Майкрософт (Microsoft Corp.), 2009. Все права защищены.

C:\Windows>c:\ProcDump\procdump.exe -accepteula -e explorer.exe c:\procdump\

ProcDump v5.13 - Writes process dump files
Copyright (C) 2009-2013 Mark Russinovich
Sysinternals - www.sysinternals.com
With contributions from Andrew Richards

Process: explorer.exe (4244)
CPU threshold: n/a
Performance counter: n/a
Commit threshold: n/a
Threshold seconds: n/a
Number of dumps: 1
Hung window check: Disabled
Exception monitor: Unhandled
Exception filter: Disabled
Terminate monitor: Disabled
Dump file: c:\procdump\explorer_YYMMDD_HHMMSS.dmp


Press Ctrl-C to end monitoring without terminating the process.

[20:51:30] Exception: E06D7363.?AVGenericException@wmi@@
[20:51:30] Exception: 0000071A
[20:51:30] Exception: E06D7363.?AVGenericException@wmi@@
[20:51:30] Exception: 0000071A
[20:51:30] Exception: E06D7363.?AVGenericException@wmi@@
[20:51:30] Exception: 0000071A
[20:51:30] Exception: E06D7363.?AVGenericException@wmi@@
[20:51:30] Exception: 8001010D
[20:51:30] Exception: 8001010D
The process has exited.


C:\Windows>C:\ProcDump\procdump.exe -e -w totalcmd64.exe C:\ProcDump

ProcDump v5.13 - Writes process dump files
Copyright (C) 2009-2013 Mark Russinovich
Sysinternals - www.sysinternals.com
With contributions from Andrew Richards

Waiting for process named totalcmd64.exe...

Process: TOTALCMD64.EXE (2984)
CPU threshold: n/a
Performance counter: n/a
Commit threshold: n/a
Threshold seconds: n/a
Number of dumps: 1
Hung window check: Disabled
Exception monitor: Unhandled
Exception filter: Disabled
Terminate monitor: Disabled
Dump file: C:\ProcDump\TOTALCMD64_YYMMDD_HHMMSS.dmp


Press Ctrl-C to end monitoring without terminating the process.

[21:02:07] Exception: 000006BA
The process has exited.


C:\Windows>




© OSzone.net 2001-2012