Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   Запуск из контекстного меню - крах х64 оболочки запуска (http://forum.oszone.net/showthread.php?t=256800)

gora 21-03-2013 14:52 2115633

Запуск из контекстного меню - крах х64 оболочки запуска
 
Прошу помощи в поиске причин и возможных решений

Проблема:
Я создаю в контекстном меню пункт "Запустить с параметрами (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 и нужно нажать любую клавишу для продолжения установки архиватора.

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

Ссылка на архив

Petya V4sechkin 21-03-2013 20:28 2115809

Цитата:

Цитата gora
Если запуск произведен из контекстного меню в оболочке, то крашится оболочка, если из TC, то крашится ТС

Давайте посмотрим дампы процессов:
  1. скачайте утилиту ProcDump и распакуйте в отдельную папку, например C:\ProcDump;
  2. запустите командную строку (cmd.exe) от имени Администратора и выполните:
    Код:

    C:\ProcDump\procdump.exe -accepteula -e explorer.exe C:\ProcDump\
    для Explorer и
    Код:

    C:\ProcDump\procdump.exe -e -w totalcmd.exe C:\ProcDump\
    для TC;
  3. вызовите сбой Explorer и TC;
  4. выложите сохраненные DMP-файлы из папки C:\ProcDump в архиве на любой файлообменник.

gora 21-03-2013 21:08 2115842

Цитата:

Цитата Petya V4sechkin
выложите сохраненные 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>



Время: 17:08.

Время: 17:08.
© OSzone.net 2001-