Как вывести исполняемый файл с использованием C ++ - PullRequest
0 голосов
/ 30 июня 2018

Я хотел бы иметь программу, которая может записать другую программу на диск. Я думаю, что способ будет использовать стандартную двоичную запись в файл. Моя проблема здесь в том, что я не знаю, как поместить другой исполняемый файл в исходный код моей «установочной» программы. Я не хочу иметь никаких дополнительных файлов рядом с моей установочной программой. Я хотел бы использовать API MFC для этого, если есть необходимость использовать что-то, кроме стандартного C ++

1 Ответ

0 голосов
/ 30 июня 2018

Отредактируйте файл ресурсов * .rc и добавьте следующую строку:

1 RCDATA "C:\\my disk\\source.exe"

"source.exe" будет включено в вашу программу. Вы можете сделать это с любым файлом.

1 используется в качестве идентификатора в приведенном выше примере. Вы можете использовать любой уникальный идентификатор.

Чтобы извлечь данные во время выполнения:

bool copy()
{
    HINSTANCE hinst = AfxGetInstanceHandle(); //or just NULL
    HRSRC hrsrc = FindResource(hinst, MAKEINTRESOURCE(1), RT_RCDATA);
    if(hrsrc)
    {
        auto hglobal = LoadResource(hinst, hrsrc);
        auto data = LockResource(hglobal);
        auto datasize = SizeofResource(hinst, hrsrc);

        CFile file;
        if(file.Open(L"c:\\target\\output.exe", CFile::modeWrite | CFile::modeCreate))
        {
            file.Write(data, datasize);
            file.Close();
            return true;
        }
        else
        {
            TRACE("cannot open file\n");
        }
    }
    else
    {
        TRACE("resource not found\n");
    }

    return false;
}
...