Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2019.03.03;
Скачать: CL | DM;

Вниз

Имя к исполняемому файлу в потоке   Найти похожие ветки 

 
Raisa   (2016-11-01 14:10) [0]

В потоке пытаюсь запустить исполняемый модуль с параметром.

var AppToRun,Params,CmdLine :string;
    Rlst: LongBool;
..........

AppToRun:=ExtractFilePath(Application.ExeName)+"path1\path2\exename.exe";
Params      := "-noform";
CmdLine     := Format(""%s" %s", [AppToRun, Params]);
Rlst:= CreateProcess(Pointer(AppToRun), PChar(CmdLine),nil, nil, false, NORMAL_PRIORITY_CLASS,
       nil, nil, StartUpInfo, ProcessInfo);


Внешняя программа не запускается.

Если пишу просто полный путь типа так:
AppToRun:="\\slovo1.slovo2.slovo3.slovo4\subdir1\subdir2\subdir3\subdir4\e xename.exe";
и далее по вышеприведенному тексту,
то поток создается и в нем запускается исполняемый файл с указанным именем.

ShowMessage выдает путь, но вместо части пути я вижу многоточие.

Как правильно задать путь к исполняемому модулю в потоке? Есть или нет ограничение в длине пути? Или поток тут ни при чем?


 
iop ©   (2016-11-01 14:20) [1]

Pointer(AppToRun) божечки, што это


 
Игорь Шевченко ©   (2016-11-01 14:49) [2]

PChar(AppToRun)


 
Raisa   (2016-11-01 15:30) [3]

Если писать так PChar(AppToRun), то тоже не работает (не запускается модуль в потоке).

Если программу запускать из-под Дельфи, то всё хорошо.
Если bat-файл запускать с сетевого диска, то тоже всё хорошо.

Но нужно запускать через bat-файл со своего компа, котором прописан путь к exe-файлу в виде \\slovo1.slovo2.slovo3.slovo4\subdir1\subdir2\subdir3\subdir4\.  В этом случае не запускается внешний ехешник в потоке.

Спасибо за ответы. Проблема остается.


 
iop ©   (2016-11-01 15:42) [4]

все просто.
файл такой есть - файл запускается.
нет такого файла - файл не запускается.

патоки-шматоки.....


 
Игорь Шевченко ©   (2016-11-01 15:50) [5]


> Если пишу просто полный путь типа так:
> AppToRun:="\\slovo1.slovo2.slovo3.slovo4\subdir1\subdir2\subdir3\subdir4\e
> xename.exe";


А какое значение имеет ExtractFilePath(Application.ExeName) ?


 
Raisa   (2016-11-01 15:54) [6]

Нужно запускать внешний ехешник в потоке по пути относительно основного ехешника, который на Delphi.


 
iop ©   (2016-11-01 16:00) [7]

ExtractFilePath

Returns the drive and directory portions of a file name.

и откуда здесь возьмется путь относительно какого-то там exe на делфи?
будет абсолютный путь


 
Raisa   (2016-11-01 16:02) [8]

Я тоже пришла к такому выводу. Значит, нужен поток с параметром создавать? А параметр - имя внешнего ехешника?


 
iop ©   (2016-11-01 16:05) [9]

забудь про потоки.

нету файла путь к которому лежит в переменной AppToRun.

о чем тебе честно расскажет гетластеррор


 
sniknik ©   (2016-11-01 18:28) [10]

Rlst:= CreateProcess( ....
if not Rlst then RaiseLastOSError;


 
Raisa   (2016-11-02 09:02) [11]


> sniknik ©   (01.11.16 18:28) [10]

Спасибо, вроде что-то похожее есть (написала выше), но ни разу сообщения не выдавалось.

Может, непонятно объяснила суть проблемы.
Есть ехешник на Дельфи, в нем есть кнопка, на которую вызывается поток, запускающий ехешник, который работает длительное время. Из-под Дельфи всё работает.

Создан ярлык для bat-файла, который вызвает ехешник на Дельфи.
Диск_сетевой:\Каталог\имя.bat
Поток работает.

Создан второй ярлык.
\\slovo1.slovo2.slovo3.slovo4\subdir1\subdir2\subdir3\subdir4\имя.bat
Программа работает. Поток ошибки не выдает, но и не запускает внешнюю программу. Сообщение об ошибке не выдается.

if Rlst then
begin
WaitForInputIdle(ProcessInfo.hProcess, INFINITE);
...............
end
else
begin
Error := GetLastError;
MessageDlg(SysErrorMessage(Error), mtError, [mbOk], 0);
exit;
end;


Я не знаю, как надо работать с потоком, чтобы программа работала независимо от вызывающего bat-файла.


 
sniknik ©   (2016-11-02 09:59) [12]

> Диск_сетевой:\Каталог\имя.bat
Диск_сетевой
предупреждение безопасности "не удается проверить автора файла" выдает при запуске? первом. из потока в принципе должно быть такое же, как будет система реагировать х.з.

> имя.bat
а внутри по какому пути запускается программа? первая, та от которой ты после ExtractFilePath путь считаешь, вторая тоже там лежит, или от батника?

вместо CreateProcess сделай показ расчитанных путей, и запусти в том батнике что не работает, что покажет? реальности соответствует?

> как надо работать с потоком, чтобы программа работала независимо от вызывающего bat-файла.
и так не зависят, где потоки и где бат файл... вот твой код может зависеть, т.к. ты можешь что-то не так рассчитать.


 
iop ©   (2016-11-02 10:23) [13]

ей надо рассказать про текущие каталоги процессов.

запустили проводник, или фар и тыкаем в батник.
у проводника и фара по текущему каталогу
в батнике какой-то там путь, возможно относительный а возможно абсолютный....
возможно относительный от ее тачки, возможно от тачки на которой шара.

если тыкают в ярлык, батника, то у него возможно свой рабочий каталог угадай какой.

и тут приходит рая и в этот хаос добавляет свой проджект1 экзе
со своим фик угадаешь каким текущим каталогом процесса на момент запуска батника ........


 
iop ©   (2016-11-02 10:25) [14]

а когда ей сто раз скажешь, что по запускаемому пути файла нету,

она в сотый раз скажет, что есть кнопка, что надо запустить, но она не знает как с потоками работать.


 
iop ©   (2016-11-02 10:26) [15]

и борщ все на варится и не варится


 
Raisa   (2016-11-02 10:52) [16]

> sniknik ©   (02.11.16 09:59) [12]
> > Диск_сетевой:\Каталог\имя.bat
> Диск_сетевой
> предупреждение безопасности "не удается проверить автора
> файла" выдает при запуске? первом. из потока в принципе
> должно быть такое же, как будет система реагировать х.з.

Не выдает ни разу "не удается проверить автора" при запуске из  Диск_сетевой:\Каталог\имя.bat.

При запуске из \\slovo1.slovo2.slovo3.slovo4\subdir1\subdir2\subdir3\subdir4\имя.bat это сообщение выдается сразу до запуска.

> > имя.bat
> а внутри по какому пути запускается программа? первая, та
> от которой ты после ExtractFilePath путь считаешь, вторая
> тоже там лежит, или от батника?

Не поняла. Программа одна на Дельфи с потоком для вызова другого батника.

> вместо CreateProcess сделай показ расчитанных путей, и запусти
> в том батнике что не работает, что покажет? реальности соответствует?

В обоих случаях выдается при запуске процесса одно и тоже. Скопировала и сравнила. Абсолютно одинаковый путь к внешнему батнику. И в первом случае всё работает.

\\slovo1.slovo2.slovo3.slovo4\subdir1\subdir2\subdir3\subdir4\subdir5\subdir6\им я_другого.bat

> т.к. ты можешь что-то не так рассчитать.

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

Интересно, что батники по-разному себя ведут (я имею виду выдается-не_выдается сообщение при запуске).


 
Raisa   (2016-11-02 10:58) [17]


> iop ©   (02.11.16 10:25) [14]
> а когда ей сто раз скажешь, что по запускаемому пути файла
> нету,



Получается по одному и тому же пути файл то есть, то нету? Разве так бывает, если путь абсолютный?
И ехешник на Дельфи один и тот же.
Путь-то одинаковый в обоих случаях при запуске батника из потока. ShowMessage из потока так сказал, а я скопировала и все буковки сравнила.


 
iop ©   (2016-11-02 11:15) [18]

Разве так бывает, если путь абсолютный?

запросто.


 
Raisa   (2016-11-02 11:21) [19]


> iop ©   (01.11.16 14:20) [1]
> Pointer(AppToRun) божечки, што это
>
> Игорь Шевченко ©   (01.11.16 14:49) [2]
> PChar(AppToRun)
>
>


Спасибо, исправила. Пробовала по-разному.


> iop ©   (02.11.16 11:15) [18]

Кстати в Дельфи до вызова потока, я проверяю есть или нет другой батник. Типа есть.
Что исправлять мне в программе, чтобы программа работала из обоих батников?


 
iop ©   (2016-11-02 11:23) [20]

внутри батника:

if exist твой_файл (
   notepad
) else (
   calc
)

запусти тычком по ярлыку и из делфи.

и смотри что запустится. блокнот или калькулятор.

в делфи запустится калькулятор


 
Raisa   (2016-11-02 12:46) [21]

В Дельфи до запуска не дошло, так как выдалось сообщение, что файл (батник) не найден.
Из второго ярлыка просто ничего не запустилось.

Спасибо за идею о том, что надо смотреть во втором батнике, который запускается из потока.



Страницы: 1 вся ветка

Текущий архив: 2019.03.03;
Скачать: CL | DM;

Наверх




Память: 0.53 MB
Время: 0.006 c
2-1477998615
Raisa
2016-11-01 14:10
2019.03.03
Имя к исполняемому файлу в потоке


2-1477645793
валя
2016-10-28 12:09
2019.03.03
БД Integer->String


15-1476987400
Jeer
2016-10-20 21:16
2019.03.03
Deep


1-1360604145
@!!ex
2013-02-11 21:35
2019.03.03
Delphi XE 3 и 64 битная компиляция


8-1212737827
Феликс
2008-06-06 11:37
2019.03.03
WMF, полилинии "грубеют"