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"
Источник проблемы в dlls/vbscript. После выполнения 'winetricks -q wsh57' поведение меняется на описанное в первом комментарии как это происходит в Windows.
(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.
(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. Патч принят. Отмечаю эту задачу как решенную.
Принято.