Форум: "Начинающим";
Текущий архив: 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