Программно запустить приложение

220
01 декабря 2017, 06:16

Пытаюсь с помощью данной функции пытаюсь открыть приложение(путь указан верно, вместе с расширением .exe):

ShellExecute(NULL, "open", fullname.c_str(), NULL, NULL, SW_HIDE);

И в итоге у меня открывается целая куча копий:

Answer 1

ShellExecute считается устаревшей функцией и стоит использовать CreateProcess. Вот пример моей реализации:

bool Net::executeCommand(QString exe, QString command, LPDWORD lp)
{
    // игнорировать предупреждения о non-initialized fields в si
    #pragma GCC diagnostic ignored "-Wmissing-field-initializers"
    STARTUPINFO si = {sizeof(si),0,};
    PROCESS_INFORMATION pi;
    ZeroMemory(&si, sizeof(si));
    ZeroMemory(&pi, sizeof(pi));
    auto chr = strdup(command.toStdString().c_str());
    size_t cSize = strlen(chr)+1;
    wchar_t wc[cSize];
    mbstowcs(wc, chr, cSize);
    LPWSTR ptr = wc;
    // осталось обрабатывать ошибки как - то
    if (CreateProcess(reinterpret_cast<LPCWSTR>(exe.utf16()), ptr, NULL, NULL, FALSE, CREATE_NO_WINDOW, NULL, NULL, &si, &pi))
    {
        delete[] ptr;
        WaitForSingleObject(pi.hProcess, INFINITE);
        GetExitCodeProcess(pi.hProcess, lp);
        return true;
    }
    else
    {
        delete[] ptr;
        return false;
    }
    return true;
}

Пример вызова:

executeCommand(Net::GetWindowsPath() + "\\system32\\Mstsc.exe", "Mstsc /v:" + lpRemoteName, &lp)

А множественный запуск, я уверен, связан с тем, что Вы вызываете функцию не один раз. Чтобы проверить это, Вы можете создать пустой проект и там запустить свою функцию.

READ ALSO
C++ csv запись в файл

C++ csv запись в файл

Есть массив, данные в котором меняются в цикле и в этом же цикле выводятсяНужно записать в csv файл этот массив с разными данными в столбики...

260
Не могу найти ошибку при проходе по std::vector&lt;std::shared_ptr&lt;MyClass&gt; &gt;

Не могу найти ошибку при проходе по std::vector<std::shared_ptr<MyClass> >

Не могу понять, почему в вот таком классе возникает ошибка:

248
Перегрузка операции ++ для класса матриц в C++

Перегрузка операции ++ для класса матриц в C++

Я создал класс матриц и перегрузил для него операцию ++ (прибавление к матрице единичной матрицы), но почему то программа не работает, при запуске...

280
Как создаётся файл .AVI и/или .MJPG из jpeg-кадров на С++?

Как создаётся файл .AVI и/или .MJPG из jpeg-кадров на С++?

В программе на C++ идёт непрерывный поток кадров в формате jpeg (снимает вебкамера)Кадры на диск не попадают, всё в буфере

260