![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как запустить cmd.exe как в TotalCommander?
Wadimka © (2012-09-09 20:18:00)вопрос по сути ерундовый, но у меня проблема.
есть мое консольное приложение, работает с сетевым интерфейсом.
Если запускаю я его из строки Totalcommander, ssc.exe 192.168.1.3 то отрабатывает отлично
запускаю его из своей программы
пробовал через ShellExecute, ShellExecuteEx, CreateProcess
побоку, не работает, вернее запускается но чего-то там не может инициализировать, как запустить из своей программы, как это делает TotalCommander?
пробовал так:
cmd.exe /C g:\00MYPRG\ssc.exe 192.168.1.2 - ИЗ totalcommander пашет
из своей программы вышеописанными методами, нивкакую!
для ssc.exe нужна dll которая лежит в каталоге вместе с этим файлом, именно в ней что-то не инициализируется.
Dennis I. Komarov (2012-09-17 19:55:00) [1]
> и чего я там не дочитал?
что-то... я же не знаю что. или TC писали не люди?
"admin admin" это к чему?
Wadimka (2012-09-13 19:31:00) [2]
> Dennis I. Komarov © (10.09.12 20:06) [27]
>
>
> > filename:=g:\00MYPRG\ssc.exe
> > params:='192.168.1.2 admin admin retparams.txt'
>
> Читай справку дальше...
и чего я там не дочитал?
Dennis I. Komarov (2012-09-10 20:06:00) [3]
> filename:=g:\00MYPRG\ssc.exe
> params:='192.168.1.2 admin admin retparams.txt'
Читай справку дальше...
Wadimka (2012-09-10 18:39:00) [4]
> cobalt © (10.09.12 18:08) [25]
>
> Учись отлаживать - начни с простейшего
> begin
> OutputDebugString('программа загрузилась, отладка начата');
>
> <какой-то код>
> OutputDebugString(PWideChar(TimeToStr(Time) + ' Сейчас вызову
> процедуру такую-то'));
> Процедура1(параметр1);
> ...
> end;
Ну да очень умно для этого
яж писал выше ответ об ошибке приходит из DLL criptlib (CL32.DLL)
cobalt (2012-09-10 18:08:00) [5]Учись отлаживать - начни с простейшего
begin
OutputDebugString('программа загрузилась, отладка начата');
<какой-то код>
OutputDebugString(PWideChar(TimeToStr(Time) + ' Сейчас вызову процедуру такую-то'));
Процедура1(параметр1);
...
end;
Wadimka (2012-09-10 14:16:00) [6]все равно не въеду, почему из Totala пашет, а у меня нет
Wadimka (2012-09-10 13:48:00) [7]Сорри последне описанное тоже не работает!
это я предположил, что должно работать, но таже самая ошибка!
Wadimka (2012-09-10 06:23:00) [8]
>> DVM
> > Wadimka (09.09.12 22:16) [15]
>
>
> > filename
>
>
> > params
>
> что за значения имеют?
filename:=g:\00MYPRG\ssc.exe
params:='192.168.1.2 admin admin retparams.txt'
где retparams.txt это файл вывода результата, в ssc.exe находится SSH клиент, пока только коннектится (т.к. дальше нет смысла все писать пока не заработает) если указываю retparams.txt без пути сохранения то сохранятеся нормально в g:\00MYPRG\ вроде как в рабочий каталог
кароче я понял что в чем дело но не пойму причину (я уже спрашивал тут в другой ветке, почему не работает)
Если я делаю любым выше описанныйм мною способом из [0], т.е. ShellExecute, ShellExecuteEx, CreateProcess с основной формы, т.е. кинул на форму баттон1 а там любой код с запуском g:\00MYPRG\ssc.exe то все отрабатывает на ура, как и из тотала
а если я это-же делаю из потока TTHread то ssc.exe ругается в данном случае, что cryptSetAttribute: Data has not been initialised
Конкретно ошибка приходит из DLL (для SSH использую cryptlib)
в чем проблема ума не приложу, почему из потока не запускается
Германн (2012-09-10 04:39:00) [9]
> Inovet © (10.09.12 03:06) [20]
>
> > [19] Германн © (10.09.12 02:10)
> > Почему подлый? Его командная строка по определению «работает»
> > в том каталоге, который в данный момент активен в одной
> > из его панелей.
>
> Это как раз нормально. Подлость была бы, если бы он устанавливал
> текущим каталог запускаемой программы
> g:\00MYPRG\ssc.exe
> когда на панели другой каталог.
>
На это он не пойдёт. :)
Inovet (2012-09-10 03:06:00) [10]> [19] Германн © (10.09.12 02:10)
> Почему подлый? Его командная строка по определению «работает»
> в том каталоге, который в данный момент активен в одной
> из его панелей.
Это как раз нормально. Подлость была бы, если бы он устанавливал текущим каталог запускаемой программы
g:\00MYPRG\ssc.exe
когда на панели другой каталог.
Германн (2012-09-10 02:10:00) [11]
> Или сам Тотал задаёт? Неужели он такой подлый.
Почему подлый? Его командная строка по определению "работает" в том каталоге, который в данный момент активен в одной из его панелей. Т.е. он всегда при выполнении любой команды из этой строки всегда устанавливает CurrentDir. А как прикажешь ему поступать иначе? Это ведь не пункт меню Windows - Run. Вот пусть Вадимка попробует запустить своё консольное приложение через этот Run(В русифицированной Windows это - "Выполнить").
P.S.
Не представляю себе как бы я работал с Windows/Total Commander, если бы он не устанавливал CurrentDir.
Inovet (2012-09-09 23:04:00) [12]> [17] Плохиш © (09.09.12 22:54)
> > Так в Тотале не задаёт.
>
> Задаeт.
> [7] DVM © (09.09.12 21:16)
> Откуда ты знаешь?
Или сам Тотал задаёт? Неужели он такой подлый.
Плохиш (2012-09-09 22:54:00) [13]
> Так в Тотале не задаёт.
Задаëт.
DVM (2012-09-09 22:45:00) [14]
> Wadimka (09.09.12 22:16) [15]
> filename
> params
что за значения имеют?
Wadimka (2012-09-09 22:16:00) [15]
>
> > Пробовал я и ShellExecute итог как и выше
> >
> >
>
> Значит не правильно пробовал...
ShellExecute(0,nil,pchar(filename),pchar(params),pchar(extractfilepath(filename) ),sw_normal); - болт
ShellExecute(form1.handle,nil,pchar(filename),pchar(params),pchar(extractfilepat h(filename)),sw_normal); -болт
ShellExecute(form1.handle,'open',pchar(filename),pchar(params),pchar(extractfile path(filename)),sw_normal); -болт
ShellExecute(Application.handle,nil,pchar(filename),pchar(params),pchar(extractf ilepath(filename)),sw_normal); -болт
ShellExecute(Application.handle,'open',pchar(filename),pchar(params),pchar(extra ctfilepath(filename)),sw_normal); -болт
Как еще то?
Dennis I. Komarov (2012-09-09 21:58:00) [16]
> Пробовал я и ShellExecute итог как и выше
>
>
Значит не правильно пробовал...
Inovet (2012-09-09 21:53:00) [17]> [7] DVM © (09.09.12 21:16)
> > Так в Тотале не задаёт.
>
> Откуда ты знаешь?
Предпологаю по наличию пути к exe
> [0] Wadimka (09.09.12 20:18)
> cmd.exe /C g:\00MYPRG\ssc.exe 192.168.1.2 ИЗ totalcommander пашет
но кто его знает, где там автор находится в Тотале.
Wadimka (2012-09-09 21:46:00) [18]
> А может справку по ShellExecute почитать?
> function ShellExecute(hWnd: HWND; Operation, FileName, Parameters,
>
> Directory: PChar; ShowCmd: Integer): HINST;
Пробовал я и ShellExecute итог как и выше
Dennis I. Komarov (2012-09-09 21:46:00) [19]у тебя ошибка
Wadimka (2012-09-09 21:44:00) [20]В createProcess пробовал указывать, понту тоже 0
cmd.exe это я уже мудрить начал, потому-что сразу тоже не работает
а вот с тотала работает, не могу понять в чем дело