Page 1 of 1

Spustenie programu z Command Line bez Command Shell okna

Posted: 08 Nov 2006, 15:41
by Somo
Dá sa Salamander nastaviť tak aby neotváral textové Command Shell okno keď spúšťam programy cez Command Line?

Napríklad: regsvr32 msinet.ocx

Prečo Salamander otvorí textové okno, keď spúšťam Windows aplikáciu? To textové okno je vačšinou prázdne a musím ho zbytočne zatvárať po ukončení spusteného programu.

Ďakujem.

Posted: 08 Nov 2006, 15:44
by Jan Rysavy
Mrkněte do konfigurace Options > General > Close shell window after command execution.

Případně Alt+Enter v příkazovém řádku obrací tuto volbu.

Případně mrkněte do Help > Index a vyhledejte "Command Line".

Posted: 09 Nov 2006, 14:24
by Somo
Myslel som skôr aby sa to textové okno vôbec neotváralo po spustení z Command Line.

Napr.: Spustím program a mám ho hodinu spustení a hodinu "zavadzia" aj textové okno. Škoda.

Keď vyslovene chcem Command Shell, spúšťam ho predsa cez "Num /".

Ďakujem.

Posted: 09 Nov 2006, 15:52
by Jan Rysavy
Rozumím. Zde je problém v tom, že nedokážeme spolehlivě určit, které příkazy bychom měli spustit přímo (bez Command Shell okna) a které přes Command Shell.

Posted: 10 Nov 2006, 04:18
by Datalog
Somo wrote:... Spustím program a mám ho hodinu spustení a hodinu "zavadzia" aj textové okno. ...
A nedá se to textové okno zavřít? Mělo by to jít i bez nebezpečí, že by se zavřela spuštěná aplikace (tedy nejedná-li se o konzolovou aplikaci - ale ta by si textové okno otevřela tak i tak).

Posted: 10 Nov 2006, 09:44
by Jan Rysavy
Ale kdy ho zavřít a jak?

Posted: 10 Nov 2006, 13:12
by Datalog
Jan Rysavy wrote:Ale kdy ho zavřít a jak?
Nemyslím zavřít automaticky, programově. Myslím ručně. Ťuknutím na křížek vpravo nahoře, Aby tam nepřekáželo "hodinu".

Tedy např.: spustím "notepad", počkám až naběhne (notepad i konzole), pak konzoli zavřu myší "X"em. Notepad běží dál. (W XP pro/home SP2 CZ)

Posted: 10 Nov 2006, 13:49
by Denis
To mi taky nejde moc do hlavy, proč se spouští konzole, když spouštím např. výše zmiňovaný notepad, jelikož stejně se v té konzoli nedá nic psát dokud notepad neuzavřu. Resp - psát se dá, ale nezobrazuje se to :-)

On ten řádek už celkově postrádá smysl, jelikož jeho chování je nyní úplně mimo rámec původní myšlenky, která měla opodstatnění v době DOSu, ale nyní....

Využil bych ho tedy jen pro spouštění aplikací. viz MSDN ShellExecute(). Nic jiného už pomoci tohoto řádku stejně nelze provádět.

Posted: 10 Nov 2006, 14:06
by Datalog
Denis wrote:To mi taky nejde moc do hlavy, proč se spouští konzole, ...
... Využil bych ho tedy jen pro spouštění aplikací. viz MSDN ShellExecute()...
Protože některé programy a některé OS se chovají jinak pro ShellExecute a jinak je-li program spuštěn přes command-interpreter. A jinak je-li spuštěn s konzolí a jinak bez ní.
Obecně je problém hlavně(jen) v interpretaci stdin a stdout. Sám si vzpomínám, že se jsem při testech (pře pár lety) dokázal vygenerovat asi 6-8 kombinací, kdy se stdin/stdout choval pro cílový program jinak (cílové programy: win32-gui, win32-conzole, win 3.x (16) a DOS; spuštění W2K, win98).

Nevím jaký přesně způsob spuštění zvolil Altap, ale musím říct že mne vyhovuje - je ekvivalentní jako by to šlo z command promptu a to i u řady 9x i NT).

Posted: 10 Nov 2006, 15:39
by zarevak
V EXE souboru by mělo být uloženo, zad program vyžaduje konzoli nebo Windowsí GUI. (pomocí PE Viewer pluginu část: Optional Header řádek Subsystem)
Problém je, že Servant Salamander těžko zjistí, který soubor se spustí a zda vůbec zadaný příkaz má nějaký soubor (příkazy typu copy).

Problém s odhadnutím spuštěného souboru je v tom, že existuje spousty míst, kde se soubor hledá (minimálně aktualní adresář a proměnná %PATH%) a při chybějíci příponě Windows doplní i příponu podle toho, jaké soubory naleznou. Navíc se tento způsob vyhledávání souborů IIRC liší mezi různými verzemi Windows...

Posted: 10 Nov 2006, 16:11
by Datalog
zarevak wrote:V EXE souboru by mělo být uloženo, zad program vyžaduje konzoli nebo Windowsí GUI. (pomocí PE Viewer pluginu část: Optional Header řádek Subsystem)
Problém je, že Servant Salamander těžko zjistí, který soubor se spustí a zda vůbec zadaný příkaz má nějaký soubor (příkazy typu copy).

Problém s odhadnutím spuštěného souboru je v tom, že existuje spousty míst, kde se soubor hledá (minimálně aktualní adresář a proměnná %PATH%) a při chybějíci příponě Windows doplní i příponu podle toho, jaké soubory naleznou. Navíc se tento způsob vyhledávání souborů IIRC liší mezi různými verzemi Windows...
Tak tak.

A to ještě neuvažujeme případ když je program přeložen jako GUI, ale dle stavu stdin/stdout a konzole (např. fail při AllocConsole) reaguje jinak když má platný vstup/výstup a když nemá (případně dle typu handle zjistí zda jde o výstup na konzoli či ne).

Navíc si nejsem jist, jak se chovají EXE packery (typu UPX a podobné) a jak dobře zachovávají EXE hlavičku.

Posted: 10 Nov 2006, 18:15
by Jan Rysavy
Denis wrote:On ten řádek už celkově postrádá smysl, jelikož jeho chování je nyní úplně mimo rámec původní myšlenky, která měla opodstatnění v době DOSu, ale nyní...
To je nesmysl, příkazový řádek je klíčový pro pokročilejší uživatele. Potřebují spouštět konzolové aplikace jako GnuPG, CVS, SVN, atd, specifikovat jejich paramtery (viz horké klávesy pro přinesení názvů souborů) a po jejich vykonání si prohlédnout výstup na konzoli.

Posted: 13 Nov 2006, 12:14
by Denis
Když to takhle vytrhnete z kontextu, tak máte pravdu, ale já to myslel trochu jinak.

Pokud někdo bude chtít command, tak napíše "Command" a spustí se mu command.

Ale když napíše Notepad, tak se mu spustí notepad a nebude ho otravovat žádné další okno.

třeba příkazy pro změnu cesty "CD ..." nefungujou. Tak se domnívám, že ta koncepce onoho stavového řádku není již v této době ideální. Měl by sloužit pro spouštění aplikací stejně jako to dělá Start/Spustit...

Posted: 14 Nov 2006, 12:18
by Jan Rysavy
To by přece bylo velice nepraktické, abychom před každý příkaz CVS nebo SVN museli napsat "command" (asi spíš CMD).

Ideální stav by byl, abychom dokázali (automaticky) rozlišit příkazy pro CMD od spouštění GUI aplikací (například zmíněný notepad). Jak je patrné z diskuze nahoře, toto neumíme a netušíme jak to řešit.