Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2019.03.03;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.51 MB
Время: 0.002 c
15-1476794335
MsGuns
2016-10-18 15:38
2019.03.03
Метаморфозы в живописи


2-1477998615
Raisa
2016-11-01 14:10
2019.03.03
Имя к исполняемому файлу в потоке


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


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


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





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский