журналы отладки:
Я добавил журнал, чтобы распечатать путь к файлу до и после вызова Shellexecutexa , но заметил, что «после» forge не будет печатать. «До» журнала печатает правильный путь файла, но после вызова Shellexecuteexa , журнал «после» не является выводом, предполагая, что что-то может изменить или перезаписать строку перед вторым вызовом журнала.
Код: Выделить всё
LOG_CONSOLE("Before: %s", _strdup(execinfo.lpFile)); // Print the file path before execution
BOOL bIsExecute = ShellExecuteExA(&execinfo); // This intermittently fails with ERROR_FILE_NOT_FOUND
LOG_CONSOLE("After: %s", _strdup(execinfo.lpFile)); // This log's Path does not appear after execution
< /code>
Вывод текущего журнала: < /h4>
Before: C:\Users\\Desktop\MyProgram.exe
After: // After log's Path does not appear
< /code>
Путь журнала «после» не появляется, даже если путь кажется действительным в журнале «до». Эта проблема возникает только при использовании необработанного указателя, возвращаемого makemiddlewarepath () < /code>. < /P>
Симптом: < /h3>
[list]
[*]ShellExecuteExA[*]
Код: Выделить всё
GetLastError()[/list]
code:
Код: Выделить всё
// Windows C++ (Unicode build, Visual Studio 2022)
SHELLEXECUTEINFOA execinfo;
ZeroMemory(&execinfo, sizeof(execinfo));
execinfo.cbSize = sizeof(execinfo);
execinfo.lpVerb = TEXT("open");
execinfo.lpFile = MakeMiddlewarePath(); // File path
execinfo.fMask = SEE_MASK_FLAG_NO_UI | SEE_MASK_NOCLOSEPROCESS;
execinfo.nShow = SW_SHOWMINIMIZED;
LOG_CONSOLE("Before: %s", _strdup(execinfo.lpFile));
BOOL bIsExecute = ShellExecuteExA(&execinfo); //
Подробнее здесь: [url]https://stackoverflow.com/questions/79589834/shellexecuteexa-sometimes-fails-with-error-file-not-found-2-and-changes-lpfile[/url]
Мобильная версия