Как да стартирате като в TotalCommander
въпросът по същество е глупост, но имам проблем има моето конзолно приложение, работи с мрежов интерфейс.
Ако го стартирам от линията 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, който се намира в директорията заедно с този файл, в него нещо не е инициализирано.
Първо се опитах да стартирам cmd.exe и той ще стартира g: \ 00MYPRG \ ssc.exe 192.168.1.2 чрез команда / C
> но нещо там не може да инициализиратрябва да разберете нещо.
Може би Total Commander работи под администратор, а вашето приложение е с ограничени права?
> Wadimka (09.09.12 20:18)задайте текущата директория при стартиране
BOOL WINAPI CreateProcess( _In_opt_ LPCTSTR lpApplicationName, _Inout_opt_ LPTSTR lpCommandLine, _In_opt_ LPSECURITY_ATTRIBUTES lpProcessAttributes, _In_opt_ LPSECURITY_ATTRIBUTES lpThreadAttributes, _In_ BOOL bIn heritH andles, _In_ DWORD dwCreationFlags, _In_opt_ LPVOID lpEnvironment, _In_opt_ LPCTSTR lpCurrentDirectory, _In_ LPSTARTUPINFO lpStartupInfo, _Out_ LPPROCESS_INFORMATION lpProcessInformation );
> Wadimka (09.09.12 20:18)и защо трябва да стартираме програмата през cmd.exe? Защо не може да се стартира веднага?
Или може би прочетете помощта на ShellExecute? функция ShellExecute(hWnd: HWND; операция,Име на файл,Параметри, Директория: PChar; ShowCmd: Цяло число): HINST;
Опитах се да посоча в createProcess, също е 0
cmd.exe Вече започнах да умувам, защото и той не работи веднага , но работи от общата сума, не мога да разбера какво не е наред
> Може би прочетете помощта за ShellExecute? > function ShellExecute(hWnd: HWND; Operation, FileName, Parameters, > > Directory: PChar; ShowCmd: Integer): HINST;Опитах и ShellExecute даде резултат както по-горе
> Опитах и резултатът ShellExecute е както по-горе > >Така че не го опитах правилно.
> > > Опитах и резултатът ShellExecute е както по-горе > > > > > > Така че не го опитах правилно.
ShellExecute(0,nil,pchar(име на файл),pchar(параметри),pchar(extractfilepath(име на файл)),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); -болт
> Или Total се настройва сам? Наистина ли е толкова подъл.Защо подъл? Неговият команден ред по дефиниция "се изпълнява" във всяка директория, която в момента е активна в някой от неговите панели. Тези. той винаги задава CurrentDir, когато изпълнява всяка команда от този ред. Как бихте му казали да направи друго? Това не е елемент от менюто на Windows - Изпълнение. Така че нека Вадимка се опита да управлява своя собственаконзолно приложение чрез това Run (В русифициран Windows това е "Run").
P.S. Не мога да си представя как бих работил с Windows/Total Commander, ако не беше зададен CurrentDir.
>> DVM > > Wadimka (9/9/12 22:16) [15] > > > > име на файл > > > > параметри > > какви са стойностите?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 от основната форма, т.е. Хвърлих button1 във формуляра и там всеки код със стартирането на g: \ 00MYPRG \ ssc.exe тогава всичко работи с гръм и трясък, както и от общия
и ако направя същото от потока TTHread, тогава ssc.exe се кълне в този случай, че cryptSetAttribute: Data has not been initialised По-конкретно, грешката идва от DLL (използвам cryptlib за SSH) Не мога да си представя какъв е проблемът, защо не стартира от потока
Съжалявам, последният описан също не работи! Предположих, че трябва да работи, но същата грешка!
Няма да влизам така или иначе, защо Totala оре, но аз не
Научете се да отстранявате грешки - започнете с най-простия begin OutputDebugString("програмата е заредена, отстраняването на грешки е започнало"); OutputDebugString(PWideChar(TimeToStr(Time) + " Сега ще извикам следната процедура-тогава")); Процедура1(параметър1); . край;
Е, да, много умно за това , което написах по-горе, отговорът за грешка идва от criptlib DLL (CL32.DLL)
> име на файл:=g:\00MYPRG\ssc.exe > params:="192.168.1.2 admin admin retparams.txt"Прочетете помощта допълнително.
И какво не прочетох?
> и какво не прочетох там?нещо. не знам какво. или TC не е написан от хора? "admin admin" за какво служи?