

spusteni console pres shellexecute
Ahoj vsem, mam prikaz
ShellExecute(GetDesktopWindow,nil,'cmd.exe',pchar(' start '+edit1.text),pchar(dir1), SW_shownormal);
kdyz toto zadam nespusti se mi console, nevite nekdo jak na to aby se to spustilo v cmd jako kdyz pouziji soubor *.bat.
Program delam pro restart serveru a nestaci *.bat protoze server se obcas sekne a nenajede ani *.bat nepomuze.
Pro consoli zadavam cestu i s *.exe ale najede jen dany adresar kde console je ale aplikace se jiz nespusti.
program funguje tak ze vse hlida z SQL database kdyz padne, program ji ma restartovat ale nic se neprovede.
Pokud dam prikaz
ShellExecute(GetDesktopWindow,nil,pchar(edit1.text),'','', SW_shownormal);
consolova aplikace najede a hned spadne.
Neviem ale pozeram si ShellExecute v MSDN
ShellExecute(
HWND hwnd,
LPCTSTR lpOperation,
LPCTSTR lpFile,
LPCTSTR lpParameters,
LPCTSTR lpDirectory,
INT nShowCmd
);
Operation davas null takze defailtne sa pouzije "open", na subor cmd.exe, a parametre prikazovej riadky zasa 'start ...'?
Spravne by malo byt to druhe, ako "spadne"? zavre sa konzola po skonceni aplikacie? (to je spravne) alebo nejako inac? Skus mu dat default directory nejaky normalny a nie '', a lpParameters skus dat nil, alebo nieco hocico
P.S. alebo skus to s cmd.exe a do parametrov mu daj len to exe ktore sa ma spustit, bez ' start '
mozes mu dat namiesto start parameter ' /k '+edit1.text ak chces aby sa konzola po skonceni aplikacie neukoncila.
1. musíš uvést celou cestu k CMD.EXE
2. použij parametr /K, okno se hned nezavře
Ta dávka by fungovat měla.
Co se týká SQL serveru, i když se sekne, mělo by pomoct zastavit službu a znovu ji spustit (popř. bude misto SQLSERVER jméno instance):
Restart.BAT:
Možná by stálo za to zjistit a odstranit příčinu "sekání"
Program ktery to ma hlidat je _realmserver.exe je to console kterou kdyz spustim samostatne jede ale pri zadani prikazu i s cestou se spusti a ihned ukonci coz je spatne.
_realmserver je cizi aplikace do ktere nemohu zasahnout.
Mozes trochu objasnit co myslis tym "ale pri zadani prikazu i s cestou"?
Nejak som nepochopil čo vlastne chceš spustiť? Načo spúšťať príkazový riadok cmd.exe a v ňom potom čo spúšťaš ?
Ak chceš spustiť nejakú applikáciu tak použi WinExec:
Príklady:
WinExec('C:\NC.exe', SW_NORMAL); { DOS program }
WinExec('notepad.exe', SW_MAXIMIZED); { Windows program }
WinExec("command.com /c progdos.exe",sw_ShowNormal); program, ktorý zavrie okno po spustení
Popisi to takto, _realmserver ma vlastni databasi a do nej zapisuje status ON - OFF samotnej program dost pada a je potreba ho casto rucne restartovat.
Takto kdyz to zapisi, aplikace realmserver se spusti a hned vypadne ani neni videt proc
Samostatne kdyz ji spustim tak jede, pres tento zpusob ne, nevim proc tomu tak je.
Zkousel jsem zadat i cestu v parametru dir ani to nepomohlo.
a co urobi
?
Prip.
aby sa nezavrela konzola a videl si preco to padlo.
Prip.
Prip.
Prip. niektore z dalsich rieseni ktore su vyssie? (WinExec('program.exe'))
Takze jsem zkusil vsechny moznosti, co jsou zde vypsany ani jedna nepomohla, zjistil jsem totiz ze pokus server spustim pomoci jakehokoliv prikazu v aplikaci tak jakoby se priradi pod adresar v kterem neni, tim padem se ztrati config,libmysql.dll a python25.dll, a druhy server ktery se na nej napojuje totez.
Kdyz dam muj program k serveru spusti ten v kterem je bez problemu ale druhy ne kazdy ten server ma svuj adresar a svou knihovnu libmysql.dll kera je velikosti jina.
prenastavit nazev knihoven nejde v tomto spociva velkej orech co stim.
Kdyz to dam pres *.bat spusti se oba ale nelze je aplikaci v pripade zaseknuti ukoncit.
Na ukonceni pouzivam vlastni FCE s pomoci Tlhelp32.
Po ukonceni by mela zase nabehnout, servery musi byt samostatne nelze je dat do jednoho adresare, prepsal by se config a nesel by spustit vubec to same libmysql.dll.
A odkial alebo z akeho adresara spustas ten program rucne tak aby fungoval?
Resp. vobec nerozumiem tomu co pises. Napis presne ako rucne spustas ten program aby fungoval. Napr. si v konzole
C:\akyadresar> akyprogram.exe akeparametre
P.S. potom az si tam dosadis co tam rucne mas, tak to bude vyzerat takto:
ShellExecute(0, nil, 'akyprogram.exe', 'akeparametre' alebo nil, 'C:\akyadresar', SW_shownormal);
Ak chceš silou mocou ShellExecute tak tu máš aj s čakaním na ukončenie aplikácie:
Prípadne si výstup programu zachytitíš napr. do Tmemo:
Diky moc (pme) uz to beha jak ma

Dobrý den,
tohle se mi moc líbilo, zkoušel jsem to modifikovat tak, aby se do mema vypisoval postupný výstup z programu, který má delší odezvu ale nepodařilo se mi to. Otevřel jsem si nový handle na stejný soubor a snažil se z něho číst, ale pořad měl nulovou velikost. Neporadil by jste jak na to? Spouštím externí programy a chci jejich výstup přesměrovat do mema ale chci vidět co se dějě v reálném čase. Děkuji.
Honza
Poradte lamě.
Kde dělam kopanec.
zkoušim to rozchodit a vše kde je Windows je podtržene červeně.
tmp: Windows.THandle;
Windows.CreateFile
Windows.CloseHandle
V uses mam Winapi.Windows i ShellApi