Форум программистов, компьютерный форум CyberForum.ru

Запуск .ехе файлов - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 14, средняя оценка - 4.79
Mkh
1 / 1 / 0
Регистрация: 22.03.2013
Сообщений: 21
22.03.2013, 21:12     Запуск .ехе файлов #1
Изучаю C++ полгода.Программирую на Visual Studio 2010. Windows XP,7.Недавно познакомился с потоковым вводом/выводом, и задался вопросом, можно ли запустить удаленный файл .ехе (путь я знаю),при помощи программы на С++?Если можно, то пожалуйста приведите пример кода.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.03.2013, 21:12     Запуск .ехе файлов
Посмотрите здесь:

C++ Создание .ехе файла
создание .ехе файла C++
C++ Работа с файлами и запуск ехе из другой дерриктории.
C++ Запуск ехе-файлла
C++ Запуск .ехе-шного файла
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
-=ЮрА=-
Заблокирован
Автор FAQ
23.03.2013, 20:38     Запуск .ехе файлов #21
Цитата Сообщение от Mkh Посмотреть сообщение
хотелось как раз запуска .ехе на своем компьютере.
Ниже код примитивной стартера-оболочки, который не только создаст процесс в замороженном виде, но и выдаст исчерпывающую инфу по вновь созданному процессу (иногда она очень полезна для поиска процесса по его PID)
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
#include <windows.h>
#include <shlobj.h>
#include <iostream>
using namespace std;
 
//Диалог выбора папки/файла 
bool SelectFile(char * sPath, const char * szTitle);
bool NewProcess
    (
        const char * szProcPath,
        STARTUPINFO &pSTART ,
        PROCESS_INFORMATION &pINFO
    );
 
int main()
{
    char sPath[256]           = {0};
    STARTUPINFO pSTART        = {0};
    PROCESS_INFORMATION pINFO = {0};
    if(!SelectFile(sPath, "Выберите исполняемый файл"))
        cout<<"Error open path : "<<strerror(GetLastError())<<endl;
    else
    if(!NewProcess(sPath, pSTART, pINFO))
        cout<<"Error CreateProcess : "<<strerror(GetLastError())<<endl;
    else
    {
        cout<<"CreateProcess : PID"<<pINFO.dwProcessId<<" HANDLE : "<<pINFO.hProcess<<endl;
        cout<<"Process start at 2 seconds..."<<endl;
    }
    Sleep(2000);
    if(pINFO.hThread)
        ResumeThread(pINFO.hThread);
    return 0;
}
 
bool SelectFile(char * sPath, const char * szTitle)
{
    bool bRet = false;
    LPCITEMIDLIST lpItemDList;
    BROWSEINFO bi = {
        NULL, 
        NULL, 
        sPath,
        szTitle,
        BIF_DONTGOBELOWDOMAIN|BIF_BROWSEINCLUDEFILES,
        NULL,
        NULL,
        0
    };
    if((lpItemDList=SHBrowseForFolder(&bi)))
    {
        if((bRet = SHGetPathFromIDList(lpItemDList, sPath)))
            GetShortPathName((LPCTSTR)sPath,sPath,strlen(sPath));
        else
            sPath[0] = '\0';
    }
    return bRet;
}
 
bool NewProcess
    (
        const char * szProcPath,
        STARTUPINFO &pSTART ,
        PROCESS_INFORMATION &pINFO
    )
{
    char szCMD[1024]     = {0};//Комманданая строка
    char szDIR[MAX_PATH] = {0};//Текущий каталог
    char * szPTR         = NULL;
    if(strcpy(szDIR, szProcPath))
    if(szPTR = strrchr(szDIR, '\\'))
        szDIR[strlen(szDIR) - strlen(szPTR)] = '\0';
    return CreateProcess//Создаём процесс
        (
            szProcPath, 
            strcpy(szCMD, szProcPath), 
            NULL,
            NULL,
            FALSE,
            CREATE_SUSPENDED | NORMAL_PRIORITY_CLASS,//CREATE_SUSPENDED  - спящий процесс 
            NULL,
            szDIR,
            &pSTART,
            &pINFO
        );
}
Миниатюры
Запуск .ехе файлов   Запуск .ехе файлов  
Вложения
Тип файла: rar RunProcess.exe.rar (40.3 Кб, 6 просмотров)
Тип файла: rar RunProcess_project.rar (8.2 Кб, 5 просмотров)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Mkh
1 / 1 / 0
Регистрация: 22.03.2013
Сообщений: 21
23.03.2013, 20:54  [ТС]     Запуск .ехе файлов #22
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
Ниже код примитивной стартера-оболочки, который не только создаст процесс в замороженном виде, но и выдаст исчерпывающую инфу по вновь созданному процессу (иногда она очень полезна для поиска процесса по его PID)
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
#include <windows.h>
#include <shlobj.h>
#include <iostream>
using namespace std;
 
//Диалог выбора папки/файла 
bool SelectFile(char * sPath, const char * szTitle);
bool NewProcess
    (
        const char * szProcPath,
        STARTUPINFO &pSTART ,
        PROCESS_INFORMATION &pINFO
    );
 
int main()
{
    char sPath[256]           = {0};
    STARTUPINFO pSTART        = {0};
    PROCESS_INFORMATION pINFO = {0};
    if(!SelectFile(sPath, "Выберите исполняемый файл"))
        cout<<"Error open path : "<<strerror(GetLastError())<<endl;
    else
    if(!NewProcess(sPath, pSTART, pINFO))
        cout<<"Error CreateProcess : "<<strerror(GetLastError())<<endl;
    else
    {
        cout<<"CreateProcess : PID"<<pINFO.dwProcessId<<" HANDLE : "<<pINFO.hProcess<<endl;
        cout<<"Process start at 2 seconds..."<<endl;
    }
    Sleep(2000);
    if(pINFO.hThread)
        ResumeThread(pINFO.hThread);
    return 0;
}
 
bool SelectFile(char * sPath, const char * szTitle)
{
    bool bRet = false;
    LPCITEMIDLIST lpItemDList;
    BROWSEINFO bi = {
        NULL, 
        NULL, 
        sPath,
        szTitle,
        BIF_DONTGOBELOWDOMAIN|BIF_BROWSEINCLUDEFILES,
        NULL,
        NULL,
        0
    };
    if((lpItemDList=SHBrowseForFolder(&bi)))
    {
        if((bRet = SHGetPathFromIDList(lpItemDList, sPath)))
            GetShortPathName((LPCTSTR)sPath,sPath,strlen(sPath));
        else
            sPath[0] = '\0';
    }
    return bRet;
}
 
bool NewProcess
    (
        const char * szProcPath,
        STARTUPINFO &pSTART ,
        PROCESS_INFORMATION &pINFO
    )
{
    char szCMD[1024]     = {0};//Комманданая строка
    char szDIR[MAX_PATH] = {0};//Текущий каталог
    char * szPTR         = NULL;
    if(strcpy(szDIR, szProcPath))
    if(szPTR = strrchr(szDIR, '\\'))
        szDIR[strlen(szDIR) - strlen(szPTR)] = '\0';
    return CreateProcess//Создаём процесс
        (
            szProcPath, 
            strcpy(szCMD, szProcPath), 
            NULL,
            NULL,
            FALSE,
            CREATE_SUSPENDED | NORMAL_PRIORITY_CLASS,//CREATE_SUSPENDED  - спящий процесс 
            NULL,
            szDIR,
            &pSTART,
            &pINFO
        );
}
Все работает на ура , но только вставить код в компилятор и запустить на удалось, ругается на "char *sPath, szTitle,"и еще на что-то,вроде все инклуды добавил...в чем дело?
-=ЮрА=-
Заблокирован
Автор FAQ
23.03.2013, 21:08     Запуск .ехе файлов #23
Mkh, в аттаче лежит готовый проект RunProcess_project.rar , там все нужные настройки, обычно такое возникает
Цитата Сообщение от Mkh Посмотреть сообщение
ругается на "char *sPath, szTitle,"и еще на что-то,вроде все инклуды добавил...в чем дело?
когда создаётся дефалтный проект в VisualStudio в котором по умолчанию стоит юникод, следует переставить его на Multy-Byte-Character Set. Через пару минут прицеплю скриншот как это сделать.

Не по теме:

Для простоты следует просто открыть мой проект через dsw файл и подтвержить конвертирование да и всё

MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.03.2013, 21:16     Запуск .ехе файлов
Еще ссылки по теме:

C++ Закрывается ехе-файл
C++ Запуск и последующее удаление всех исполняемых файлов из каталога
C++ Запуск программы с запрошенным параметром и очистка временных файлов

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
-=ЮрА=-
Заблокирован
Автор FAQ
23.03.2013, 21:16     Запуск .ехе файлов #24
Так вот скриншот по изменению кодировки проекта
Миниатюры
Запуск .ехе файлов  
Yandex
Объявления
23.03.2013, 21:16     Запуск .ехе файлов
Ответ Создать тему
Опции темы

Текущее время: 04:20. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru