Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/111: Рейтинг темы: голосов - 111, средняя оценка - 4.80
215 / 215 / 20
Регистрация: 18.05.2010
Сообщений: 865
1

Запуск внешней программы

25.06.2012, 21:46. Показов 20125. Ответов 6
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Нашел пример с интернета, подставил свои данные но код не работает, просто тупо ничего не запускаеется, что не так?
Delphi
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
function ExecAndWait(const FileName,
                     Params: ShortString;
                     const WinState: Word): boolean; export;
var
  StartInfo: TStartupInfo;
  ProcInfo: TProcessInformation;
  CmdLine: ShortString;
  Handle:Integer;
begin
  { Помещаем имя файла между кавычками, с соблюдением всех пробелов в именах Win9x }
 
  CmdLine := '"' + Filename + '" ' + Params;
  FillChar(StartInfo, SizeOf(StartInfo), #0);
  with StartInfo do
  begin
    cb := SizeOf(StartInfo);
    dwFlags := STARTF_USESHOWWINDOW;
    wShowWindow := WinState;
  end;
 
  Result := CreateProcess(nil, PChar(String(CmdLine)), nil, nil, false,
                          CREATE_NEW_CONSOLE or NORMAL_PRIORITY_CLASS, nil,
                          PChar(ExtractFilePath(Filename)), StartInfo, ProcInfo);
 
  { Ожидаем завершения приложения }
  if Result then
  begin
    WaitForSingleObject(ProcInfo.hProcess, INFINITE);
    { Free the Handles }
    CloseHandle(ProcInfo.hProcess);
    CloseHandle(ProcInfo.hThread);
  end;
end;
 
procedure TFormMain.Button_NET_FrameworkClick(Sender: TObject);
begin
  ExecAndWait('dotNetFx40_Client_x86_x64.exe', '', SW_SHOWNORMAL)
end;
Добавлено через 55 секунд
Да и еще у меня OS Windows 7, Среда разработки Embercadero RAD Sutio XE2

Добавлено через 26 минут
Кое что прояснилось, во первых надо дать полный путь, измени код теперь запускается но не совем !!! запускается любая другоя программа но эта видимо требует права админа и что то тут надо подправить.
Delphi
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
function ExecAndWait(const FileName,
                     Params: ShortString;
                     const WinState: Word): boolean; export;
var
  StartInfo: TStartupInfo;
  ProcInfo: TProcessInformation;
  CmdLine: ShortString;
  SecurityAttributes : PSecurityAttributes;
begin
  { Помещаем имя файла между кавычками, с соблюдением всех пробелов в именах Win9x }
  CmdLine := '"' + Filename + '" ' + Params;
  FillChar(StartInfo, SizeOf(StartInfo), #0);
  with StartInfo do
  begin
    cb := SizeOf(StartInfo);
    dwFlags := STARTF_USESHOWWINDOW;
    wShowWindow := WinState;
  end;
 
  Result := CreateProcess(nil, PChar( String( CmdLine ) ), nil, nil, false,
                          CREATE_NEW_CONSOLE or NORMAL_PRIORITY_CLASS, nil,
                          PChar(ExtractFilePath(Filename)),StartInfo, ProcInfo);
  { Ожидаем завершения приложения }
  if Result then
  begin
    WaitForSingleObject(ProcInfo.hProcess, INFINITE);
    { Free the Handles }
    CloseHandle(ProcInfo.hProcess);
    CloseHandle(ProcInfo.hThread);
  end;
end;
 
procedure TFormMain.Button_NET_FrameworkClick(Sender: TObject);
begin
  ExecAndWait(ExtractFilePath(Application.ExeName) + 'dotNetFx40_Client_x86_x64.exe', '', SW_SHOWNORMAL)
end;
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
25.06.2012, 21:46
Ответы с готовыми решениями:

Запуск внешней программы в форме программы
Всем привет :) может Вы меня и не поймете, но не пинайте, я только учусь :) Делаю я оболочку...

Запуск внешней программы с изменением параметров
Здравствуйте уважаемые программисты. Задача такая: У меня есть программа на делфи, это клиент....

Запуск внешней программы от имени администратора
Есть интересный вопрос: понадобилось из делфи запустить внешний батник от имени администратора. ...

Создание DLL и меню внешней программы
Привет олл! скажите можно ли сделать ДЛЛку которая при подключении ее как модуля главной программы...

6
15 / 15 / 7
Регистрация: 25.06.2012
Сообщений: 95
25.06.2012, 21:51 2
Зачем такие сложности, если нужно просто запустить *.exe или другой файл?

uses ShellAPI;
ShellExecute(Handle, 'open', 'your_file', nil, nil, SW_RESTORE);
0
13 / 13 / 3
Регистрация: 30.01.2012
Сообщений: 40
Записей в блоге: 3
25.06.2012, 23:02 3
Лучший ответ Сообщение было отмечено как решение

Решение

Записать в Uses ShellApi;

и написать код например при нажатии на кнопку

ShellExecute (handle,'open','Что открить','','', sw_show);
3
215 / 215 / 20
Регистрация: 18.05.2010
Сообщений: 865
26.06.2012, 00:06  [ТС] 4
Просто я делаю установщик, и надо чтобы запускался только один процесс, а то пользователь может нажать даже дважды или запустить несколько программ одновременно.

Добавлено через 1 минуту
В принципе я нашел решение, надо сам эту программу запустить с правами админа
0
Эксперт Python
4640 / 2056 / 363
Регистрация: 17.03.2012
Сообщений: 10,139
Записей в блоге: 6
26.06.2012, 08:26 5
CreateProcess запускает процесс с теми же правами, которые у запускающего.

ShellExecute - штука более общая, она выполняет команду ОС, которая, вообще говоря, не обязана запускать процесс. Если ты с ней попробуешь запустить процесс - UAC спросит права (если потребуются).

кроме CreateProcess есть еще CreateProcessAsUser .
0
6 / 6 / 2
Регистрация: 24.09.2012
Сообщений: 381
26.05.2013, 12:45 6
Цитата Сообщение от dogvill Посмотреть сообщение
Записать в Uses ShellApi;
и написать код например при нажатии на кнопку
ShellExecute (handle,'open','Что открить','','', sw_show);
а если у меня есть переменная типа string и путь к файлу пишется так: path+'data/1.exe' , то почему это не работает:
Delphi
1
ShellExecute (handle,'open', path+'data/1.exe','','', sw_show);
или по-другому нужно?
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
32977 / 21288 / 8175
Регистрация: 22.10.2011
Сообщений: 36,565
Записей в блоге: 8
26.05.2013, 12:54 7
Лучший ответ Сообщение было отмечено volvo как решение

Решение

Delphi
1
ShellExecute (handle,'open', PChar(path+'data/1.exe'),'','', sw_show);
1
26.05.2013, 12:54
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
26.05.2013, 12:54
Помогаю со студенческими работами здесь

Запуск из программы с админскими привилегиями внешней программы без прав админа
Нужно в программе которая запущенна под амином запустить другую программу без прав админа.

Запуск внешней программы программы из коммнадной строки
Здравствуйте, есть программа D:\user\start.exe Как средствами excel vba вызвать командную строку и...

Запуск внешней программы
Доброго времени суток. exec - запускает но не возвращает управление программе system - запускает...

Запуск внешней программы
Доброго дня. Подскажите пж. В паке лежит несколько файлов с расширением dtl, например ...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru