Консольное приложение не может создать дочерний процесс при запуске при запуске - PullRequest
0 голосов
/ 21 мая 2019

В основном у меня есть консольное приложение, которое открывает другой .exe. Это консольное приложение работает нормально, когда я обычно дважды щелкаю по нему.

Я добавил приложение в regedit: Computer \ HKEY_CURRENT_USER \ Software \ Microsoft \ Windows \ CurrentVersion \ Run, чтобы оно автоматически открывалось в Windows и автоматически запускалось .exe.

У меня нет идеи, как это исправить.

#include <windows.h>
#include <shellapi.h>
#include <iostream>

using namespace std;

int main()
{
    cout << "Test...\n";
    Sleep(500);
    cout << "Test..\n";
    ShellExecuteA(NULL, "open", "Manager.exe", NULL, NULL, SW_SHOWNORMAL);
    cout << "Test....\n";
    Sleep(500);
    return 0;
}

Дело в том, что консоль открывается при запуске Windows, но не открывает файл .exe, просто в основном открывается и закрывается. Это как обойти строку «ShellExecuteA» ..., отображающую текст на консоли, и Sleep (...) работает.

ПРИМЕЧАНИЕ. Имейте в виду, что, как сказано выше, он работает правильно, когда я вручную открываю это приложение, открывается «Manager.exe». Но это не работает, когда этот код автоматически открывается в Windows. Любая помощь?

1 Ответ

3 голосов
/ 21 мая 2019

Рабочий каталог приложений, выполняемых с помощью клавиши Run, является подробностью реализации, и вы не указываете путь к Manager.exe, поэтому ShellExecuteA не может найти файл.

Укажите полный путь к Manager.exe. Вы можете позвонить GetModuleFileName(NULL, ...), если вам нужен путь вашего консольного приложения.

Windows не пропускает ваш звонок на ShellExecuteA, возможно, сбой из-за не найденной ошибки, но вы не знаете, потому что вы не проверяете возвращаемое значение!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...