Bug 14163

Summary: Ошибочный код возврата при вызове msinfo32.exe
Product: WINE@Etersoft Reporter: Vitaly Lipatov <lav>
Component: OLE / DDE / RPCAssignee: Dmitry Timoshkov <dtimoshkov>
Status: CLOSED FIXED QA Contact:
Severity: minor    
Priority: P4    
Version: unspecified   
Target Milestone: ---   
Hardware: PC   
OS: Linux   
Whiteboard:
Заявки RT: Связано с:
Дата напоминания:
Bug Depends on:    
Bug Blocks: 1036, 14171    
Attachments: скрипт вызова msinfo32.exe

Description Vitaly Lipatov 2019-10-05 15:13:07 MSK
Created attachment 3930 [details]
скрипт вызова msinfo32.exe

При запуске скрипта в Windows появляется окно msinfo32, после закрытия которого появляется MsgBox с сообщением, что код возврата 0.

При запуске в wine 4.17 появляется окно msinfo32, одновременно с которым появляется окно MsgBox с сообщением, что код возврата 259.


$ wine start msinfo1251.vbs 
000b:fixme:winediag:start_process Wine Staging 4.17 is a testing version containing experimental patches.
000b:fixme:winediag:start_process Please mention your exact version when filing bug reports on winehq.org.
0009:fixme:exec:SHELL_execute flags ignored: 0x00000100
[lav@lav test]$ 002b:fixme:vbscript:VBScript_SetScriptState unimplemented SCRIPTSTATE_INITIALIZED
002b:fixme:exec:SHELL_execute flags ignored: 0x00000100
002d:fixme:msinfo:wmain stub: L"MSINFO32.EXE"
Comment 1 Dmitry Timoshkov 2019-10-07 06:28:28 MSK
Источник проблемы в dlls/vbscript. После выполнения 'winetricks -q wsh57'
поведение меняется на описанное в первом комментарии как это происходит
в Windows.
Comment 2 Dmitry Timoshkov 2019-10-07 08:13:12 MSK
(In reply to Dmitry Timoshkov from comment #1)
> Источник проблемы в dlls/vbscript. После выполнения 'winetricks -q wsh57'
> поведение меняется на описанное в первом комментарии как это происходит
> в Windows.

Исследование проблемы показало, что ее источник в другом месте. Анализ
текста скрипта показал, что для выполнения msinfo32.exe используется метод
WscriptShell.Run(), и поиск в исходниках Wine привел меня в dlls/wshom.ocx.
Метод Run() реализован в dlls/wshom.ocx/shell.c вызовом ShellExecute(),
однако в случае с получением аргумента 'wait' ожидания завершения процесса
не происходит, а сразу получается его код завершения. Добавление ожидания
завершения процесса с помощью WaitForSingleObject(info.hProcess, INFINITE)
решило проблему с получением правильного кода возврата скриптом.

Отправил патч с исправлением для принятия в winehq.
Comment 3 Dmitry Timoshkov 2019-10-08 04:28:47 MSK
(In reply to Dmitry Timoshkov from comment #2)
> Исследование проблемы показало, что ее источник в другом месте. Анализ
> текста скрипта показал, что для выполнения msinfo32.exe используется метод
> WscriptShell.Run(), и поиск в исходниках Wine привел меня в dlls/wshom.ocx.
> Метод Run() реализован в dlls/wshom.ocx/shell.c вызовом ShellExecute(),
> однако в случае с получением аргумента 'wait' ожидания завершения процесса
> не происходит, а сразу получается его код завершения. Добавление ожидания
> завершения процесса с помощью WaitForSingleObject(info.hProcess, INFINITE)
> решило проблему с получением правильного кода возврата скриптом.
> 
> Отправил патч с исправлением для принятия в winehq.

Патч принят. Отмечаю эту задачу как решенную.
Comment 4 Vitaly Lipatov 2020-04-12 19:29:28 MSK
Принято.