TProcess. Запустить программу с пробелами в пути.

Форум для изучающих FPC и их учителей.

Модератор: Модераторы

TProcess. Запустить программу с пробелами в пути.

Сообщение KOL48 » 11.03.2011 09:19:52

Здравствуйте.

Задача: запустить внешнюю программу, путь к которой содержит пробелы. Например: C:\Program Files\Internet Explorer\iexplore.exe.

Пытаюсь запустить через TProcess:
Код: Выделить всё
procedure runapp;
var
   AProcess: TProcess;
begin
   AProcess := TProcess.Create(nil);
   AProcess.CommandLine := 'C:\Program Files\Internet Explorer\iexplore.exe';
   AProcess.Options := AProcess.Options + [poWaitOnExit];
   AProcess.Execute;
   AProcess.Free;
end;


Получаю уведомление об исключении отладчика: "Project project1.exe raised exception class 'EProcess' with message: Failed to execute C:\Program Files\Internet Explorer\iexplore.exe : 5".

Думаю, что проблема в том, что из-за пробелов в пути не находится iexplore.exe. Потому что программа без пробелов в пути (C:\WINDOWS\notepad.exe) прекрасно запускается.

Пытался брать путь в двойные кавычки, в две и три одинарные кавычки -- iexplore.exe не запускается.

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

Спасибо.
KOL48
новенький
 
Сообщения: 14
Зарегистрирован: 16.04.2010 10:10:48

Re: TProcess. Запустить программу с пробелами в пути.

Сообщение Vadim » 11.03.2011 10:51:54

KOL48 писал(а):Подскажите, как правильно запускать внешние программы с пробелами в путях.

Точно такое же, как если бы Вы эту программу запускали в консоли - обрамить путь кавычками. Других путей ещё не придумали. Или пишите вместо длинных имён короткие.
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: TProcess. Запустить программу с пробелами в пути.

Сообщение Maxizar » 11.03.2011 10:57:58

Какая версия Lazarus?.. У меня 0.9.29 SVN: 29368 (Декабрь наверно, давно не обновлял).
Делаю так:
Код: Выделить всё
unit Unit1;

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils, process, FileUtil, Forms, Controls, Graphics, Dialogs,
  StdCtrls;

type

  { TForm1 }

  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { private declarations }
  public
    { public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.lfm}
Procedure RunProg(Const ProgName:String);
var
   AProcess: TProcess;
begin
   AProcess := TProcess.Create(nil);
   AProcess.CommandLine := UTF8ToSys(ProgName);
   AProcess.Options := AProcess.Options + [poWaitOnExit];
   AProcess.Execute;
   AProcess.Free;
end;

{ TForm1 }

procedure TForm1.Button1Click(Sender: TObject);
begin
  //RunProg('c:\wavGenerator_ver1.1\WaveGenerator.exe')
   //RunProg('C:\Program Files\Internet Explorer\iexplore.exe http://yandex.ru')
   RunProg('C:\Program Files\Internet Explorer\iexplore.exe')
   //RunProg('c:\привет\WaveGenerator.exe')
end;

end.


Все программы из списка запускаются... и ни каких ковычек и все такое... даже страница яндекса открылась...
Скорее всего вам стоит обновить Lazarus, качать тут
Вложения
TProcess.zip
(2.96 КБ) Скачиваний: 505
Maxizar
постоялец
 
Сообщения: 385
Зарегистрирован: 20.03.2010 19:48:14

Re: TProcess. Запустить программу с пробелами в пути.

Сообщение KOL48 » 11.03.2011 12:58:36

Скачал Lazarus-0.9.31-29791-fpc-2.4.2-20110311-win32.exe. Удалил прежний, поставил новый.

Твой проект у меня не запускается с прежней ошибкой.

Файл C:\Program Files\Internet Explorer\iexplore.exe присутствует. Запускал его, поместив эту строку в диалог "Пуск" - "Выполнить".

ОC: Windows XP SP3. Твиками системы не увлекаюсь.
Переменные среды по команде "set path" (может, здесь что не так?): Path=C:\Perl\site\bin;C:\Perl\bin;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;c:\tools\ALIAS;C:\Program Files\Windows Imaging\;C:\PROGRA~1\Borland\Delphi6\Bin;C:\PROGRA~1\Borland\Delphi6\Projects\Bpl;C:\fox\;C:\tools\ARCH
PATHEXT=.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.LNK

Посоветуйте, пожалуйста, выход из ситуации.

Спасибо.
KOL48
новенький
 
Сообщения: 14
Зарегистрирован: 16.04.2010 10:10:48

Re: TProcess. Запустить программу с пробелами в пути.

Сообщение Maxizar » 11.03.2011 13:11:04

Очень странно... а можете выложить свой проект, для уменьшения веса, удалите иконку из проекта перекомпильте, удалите все не нужные папки... и запакуйте в архив Zip, приложите к ответу, в раздел вложения... Посмотрим, если у меня будет работать... то у вас что то загадочное...
Maxizar
постоялец
 
Сообщения: 385
Зарегистрирован: 20.03.2010 19:48:14

Re: TProcess. Запустить программу с пробелами в пути.

Сообщение KOL48 » 11.03.2011 13:20:31

Maxizar писал(а):Очень странно... а можете выложить свой проект


Для чистоты эксперимента, скачал проект из третьего сообщения в этой теме, о котором уважаемый Maxizar сказал, что запускается.

У меня не завёлся даже он.

Попробуйте запустить его у себя.
KOL48
новенький
 
Сообщения: 14
Зарегистрирован: 16.04.2010 10:10:48

Re: TProcess. Запустить программу с пробелами в пути.

Сообщение Снег Север » 11.03.2011 13:24:28

Код: Выделить всё
procedure TForm1.Button1Click(Sender: TObject);
var
   AProcess: TProcess;
begin
  AProcess := TProcess.Create(nil);
  AProcess.CommandLine := UTF8ToSys(Edit1.Text);
  AProcess.Options := AProcess.Options + [poWaitOnExit];
  AProcess.Execute;
  AProcess.Free;
end;


Ввожу в text
C:\Program Files\Internet Explorer\iexplore.exe
и у меня прекрасно запускается - vista x64, Lazarus 0.9.31 из сборки от CodeTyphon (я другими никогда пользоваться не пробовал).
Аватара пользователя
Снег Север
долгожитель
 
Сообщения: 3039
Зарегистрирован: 27.11.2007 16:14:47

Re: TProcess. Запустить программу с пробелами в пути.

Сообщение Maxizar » 11.03.2011 13:30:16

KOL48 писал(а):Попробуйте запустить его у себя.

:mrgreen: Так я его для вас и написал :) И я же прошу выложить ваш проект :)...
См сюда: http://zalil.ru/30651267 Там оставил exe скомпиленный, и добавил Edit, в который вводишь путь к программе и кликаешь кнопку.
У меня все работает...
Maxizar
постоялец
 
Сообщения: 385
Зарегистрирован: 20.03.2010 19:48:14

Re: TProcess. Запустить программу с пробелами в пути.

Сообщение KOL48 » 11.03.2011 14:41:27

Maxizar писал(а):Так я его для вас и написал И я же прошу выложить ваш проект ...


Что-то я туплю.

Maxizar писал(а):Там оставил exe скомпиленный, и добавил Edit, в который вводишь путь к программе и кликаешь кнопку.


Хочется разобраться почему у меня не запускается.
KOL48
новенький
 
Сообщения: 14
Зарегистрирован: 16.04.2010 10:10:48

Re: TProcess. Запустить программу с пробелами в пути.

Сообщение Maxizar » 11.03.2011 14:49:04

Возможно сбросились настройки вот тут: Окружение->Параметры->Окружение: Прописать пути к исходникам, компилятору и т.п.
Изображение
Maxizar
постоялец
 
Сообщения: 385
Зарегистрирован: 20.03.2010 19:48:14

Re: TProcess. Запустить программу с пробелами в пути.

Сообщение Сквозняк » 12.03.2011 23:41:48

Чего только люди не изобретут чтобы не писать строку с путями в кавычках
Код: Выделить всё
'"C:\Programm Files\trojan.exe"'
Сквозняк
энтузиаст
 
Сообщения: 1123
Зарегистрирован: 29.06.2006 22:08:32

Re: TProcess. Запустить программу с пробелами в пути.

Сообщение Padre_Mortius » 13.03.2011 01:54:18

Код: Выделить всё
procedure runapp;
var
   AProcess: TProcess;
begin
   AProcess := TProcess.Create(nil);
   AProcess.CommandLine := QuotedStr('C:\Program Files\Internet Explorer\iexplore.exe');
   AProcess.Options := AProcess.Options + [poWaitOnExit];
   AProcess.Execute;
   AProcess.Free;
end;
Padre_Mortius
энтузиаст
 
Сообщения: 1265
Зарегистрирован: 29.05.2007 17:38:07
Откуда: Спб

Re: TProcess. Запустить программу с пробелами в пути.

Сообщение Maxizar » 13.03.2011 11:30:31

Сквозняк писал(а):Чего только люди не изобретут чтобы не писать строку с путями в кавычках
Код: Выделить всё
'"C:\Programm Files\trojan.exe"'

А почему тогда у меня без кавычек и даже с рускими путями все заработало, у меня значит система невпорядке?
я в Edit вбивал следующее:
Код: Выделить всё
   c:\wavGenerator_ver1.1\WaveGenerator.exe
   C:\Program Files\Internet Explorer\iexplore.exe http://yandex.ru
   C:\Program Files\Internet Explorer\iexplore.exe
   c:\привет\WaveGenerator.exe'

и все работало. Осел yandex.ru открывал... :?
Maxizar
постоялец
 
Сообщения: 385
Зарегистрирован: 20.03.2010 19:48:14

Re: TProcess. Запустить программу с пробелами в пути.

Сообщение Padre_Mortius » 13.03.2011 14:10:01

Maxizar
Ваш пример вполне нормально будет работать на системах MS Windows Vista и выше, на MS Windows XP пробелы нужно обязательно экранировать двойными кавычками
Padre_Mortius
энтузиаст
 
Сообщения: 1265
Зарегистрирован: 29.05.2007 17:38:07
Откуда: Спб

Re: TProcess. Запустить программу с пробелами в пути.

Сообщение Maxizar » 13.03.2011 14:32:52

Padre_Mortius писал(а):Maxizar
Ваш пример вполне нормально будет работать на системах MS Windows Vista и выше, на MS Windows XP пробелы нужно обязательно экранировать двойными кавычками

Спасибо, буду знать, но самое удивительно, что у меня как раз Windows XP. SP3. :).. но на всякий случай, нужно запомнить...
Maxizar
постоялец
 
Сообщения: 385
Зарегистрирован: 20.03.2010 19:48:14

След.

Вернуться в Обучение Free Pascal

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 29

Рейтинг@Mail.ru