Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.58/19: Рейтинг темы: голосов - 19, средняя оценка - 4.58
Волшебник
64 / 63 / 7
Регистрация: 21.11.2009
Сообщений: 319
1

Запуск программ из системных директорий, (CreateProcess)

15.05.2010, 10:41. Просмотров 3589. Ответов 7
Метки нет (Все метки)

Здравствуйте!!!
Подскажите пожалуйста, как запустить, допустим "Блокнот" из системной папки Windows?
C++
1
2
3
4
5
6
7
8
9
10
11
//Директория Windows:
char WinDir[256];
GetWindowsDirectory(WinDir,256);
 
 
//Запуск notepad.exe с помощю CreateProcess
STARTUPINFO cif;
ZeroMemory(&cif,sizeof(STARTUPINFO));
PROCESS_INFORMATION pi;
CreateProcess(AnsiString (WinDir)+"\\notepad.exe",NULL,
NULL,NULL,FALSE,NULL,NULL,NULL,&cif,&pi);
У меня выдает ошибку:
E2034 Cannot convert 'AnsiString' to 'const char *'
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
15.05.2010, 10:41
Ответы с готовыми решениями:

Запуск через CreateProcess
Как запустить программу через CreateProcess и передать параметры запуска ? Если нужно исходник...

CreateProcess() и запуск приложения
Служба отслеживает наличие процесса запущенного приложения, если такового нет - стартует его. ...

Запуск WinRar с параметрами через CreateProcess
Здравствуйте. Подскажите пожалуйста как запустить WinRar с параметрами через CreateProcess. Через...

Запуск и ожидание закрытие через CreateProcess
Всем привет!! ребят подскажите!! я запускаю программу так param:='параметры запуска';...

7
Супер-модератор
8729 / 2405 / 138
Регистрация: 07.03.2007
Сообщений: 11,535
15.05.2010, 10:58 2
AnsiString (WinDir) - это зачем? ваы смотрели, какие параметры нужны для этой функции?
0
Волшебник
64 / 63 / 7
Регистрация: 21.11.2009
Сообщений: 319
15.05.2010, 11:11  [ТС] 3
Цитата Сообщение от Lord_Voodoo Посмотреть сообщение
AnsiString (WinDir) - это зачем? ваы смотрели, какие параметры нужны для этой функции?
Да смотрел..
Вот что нашел:
C++
1
2
3
4
5
6
7
8
9
10
11
CreateProcess( NULL,   // No module name (use command line)
        argv[1],        // Command line
        NULL,           // Process handle not inheritable
        NULL,           // Thread handle not inheritable
        FALSE,          // Set handle inheritance to FALSE
        0,              // No creation flags
        NULL,           // Use parent's environment block
        NULL,           // Use parent's starting directory 
        &si,            // Pointer to STARTUPINFO structure
        &pi )           // Pointer to PROCESS_INFORMATION structure
    )
Но все же никак не могу прописать системную директорию... что только не делал...
Подскажите пожалуйста как это можно воплотить в жизнь
0
Супер-модератор
8729 / 2405 / 138
Регистрация: 07.03.2007
Сообщений: 11,535
15.05.2010, 11:20 4
Rapsod, а я, наивный полагал, что вот это описание процедуры:
Код
BOOL CreateProcess(

    LPCTSTR lpApplicationName,	// pointer to name of executable module 
    LPTSTR lpCommandLine,	// pointer to command line string
    LPSECURITY_ATTRIBUTES lpProcessAttributes,	// pointer to process security attributes 
    LPSECURITY_ATTRIBUTES lpThreadAttributes,	// pointer to thread security attributes 
    BOOL bInheritHandles,	// handle inheritance flag 
    DWORD dwCreationFlags,	// creation flags 
    LPVOID lpEnvironment,	// pointer to new environment block 
    LPCTSTR lpCurrentDirectory,	// pointer to current directory name 
    LPSTARTUPINFO lpStartupInfo,	// pointer to STARTUPINFO 
    LPPROCESS_INFORMATION lpProcessInformation 	// pointer to PROCESS_INFORMATION  
   );
0
Волшебник
64 / 63 / 7
Регистрация: 21.11.2009
Сообщений: 319
15.05.2010, 11:56  [ТС] 5
Вот написал код:
Теперь нормально запускается блокнотик:

C++
1
2
3
4
5
6
7
8
9
10
11
12
//Запуск notepad.exe с помощю CreateProcess
STARTUPINFO si = {sizeof(si)};
 
si.dwFlags = STARTF_USESHOWWINDOW;
si.wShowWindow = SW_SHOWNORMAL;
 
PROCESS_INFORMATION pinfo;
 
memset(&pinfo,0,sizeof(pinfo));
 
CreateProcess(NULL,"C:\\windows\\notepad.exe",
NULL,NULL,false,0,NULL,NULL,&si,&pinfo);
Но все же случается такие ситуации что Windows не всегда установлен на диске C:
Вот у меня и возник вопрос как прописать путь:

C++
1
2
3
//Директории Windows:
char WinDir[256];
GetWindowsDirectory(WinDir,256);
В мой код?..
0
Волшебник
64 / 63 / 7
Регистрация: 21.11.2009
Сообщений: 319
16.05.2010, 00:26  [ТС] 6
Цитата Сообщение от Rapsod Посмотреть сообщение
Вот написал код:
Теперь нормально запускается блокнотик:

C++
1
2
3
4
5
6
7
8
9
10
11
12
//Запуск notepad.exe с помощю CreateProcess
STARTUPINFO si = {sizeof(si)};
 
si.dwFlags = STARTF_USESHOWWINDOW;
si.wShowWindow = SW_SHOWNORMAL;
 
PROCESS_INFORMATION pinfo;
 
memset(&pinfo,0,sizeof(pinfo));
 
CreateProcess(NULL,"C:\\windows\\notepad.exe",
NULL,NULL,false,0,NULL,NULL,&si,&pinfo);
Но все же случается такие ситуации что Windows не всегда установлен на диске C:
Вот у меня и возник вопрос как прописать путь:

C++
1
2
3
//Директории Windows:
char WinDir[256];
GetWindowsDirectory(WinDir,256);
В мой код?..
Неужели, никто не знает как это можно сделать?
0
Супер-модератор
8729 / 2405 / 138
Регистрация: 07.03.2007
Сообщений: 11,535
16.05.2010, 10:49 7
Rapsod, а вам не проще собрать все данные в AnsiString, а потом передавать в функцию так:
path.c_str()?
1
Волшебник
64 / 63 / 7
Регистрация: 21.11.2009
Сообщений: 319
16.05.2010, 11:14  [ТС] 8
Цитата Сообщение от Lord_Voodoo Посмотреть сообщение
Rapsod, а вам не проще собрать все данные в AnsiString, а потом передавать в функцию так:
path.c_str()?
Точно, пропустил .c_str()
Спасибо!))
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
16.05.2010, 11:14

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Запуск стороннего приложения через CreateProcess
Доброго времени суток! Есть два одинаковых консольных приложения, но с разными именами. Из первого...

Удаление системных программ
Как удалить прошитые (системные) программы на телефоне Motorola Moto G (2-е поколение) versia 6.0...

Определение системных требований программ
Подскажите какими утилитами или компонентами, ну или другими способами, следует пользоваться для...

Запуск приложения через CreateProcess и ожидание его завершения
В общем, суть в следующем: нужно, чтобы программа запускала консольное приложение DD под windows,...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.