Spustenie programu z Command Line bez Command Shell okna

Hlášení chyb a problémů programu Altap Salamander. Buďte, prosím, ve svých popisech co nejpodrobnější a vytvořte pro každý incident nový příspěvek. Nevkládejte programem generovaná hlášení o pádu programu, pošlete je e-mailem.
Somo

Spustenie programu z Command Line bez Command Shell okna

Post 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.
Jan Rysavy
ALTAP Staff
ALTAP Staff
Posts: 5231
Joined: 08 Dec 2005, 06:34
Location: Novy Bor, Czech Republic
Contact:

Post 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".
Somo

Post 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.
Jan Rysavy
ALTAP Staff
ALTAP Staff
Posts: 5231
Joined: 08 Dec 2005, 06:34
Location: Novy Bor, Czech Republic
Contact:

Post 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.
User avatar
Datalog
Posts: 244
Joined: 10 Dec 2005, 11:21
Location: Prague, Czech Republic
Contact:

Post 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).
Jan Rysavy
ALTAP Staff
ALTAP Staff
Posts: 5231
Joined: 08 Dec 2005, 06:34
Location: Novy Bor, Czech Republic
Contact:

Post by Jan Rysavy »

Ale kdy ho zavřít a jak?
User avatar
Datalog
Posts: 244
Joined: 10 Dec 2005, 11:21
Location: Prague, Czech Republic
Contact:

Post 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)
Denis

Post 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.
User avatar
Datalog
Posts: 244
Joined: 10 Dec 2005, 11:21
Location: Prague, Czech Republic
Contact:

Post 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).
User avatar
zarevak
Plugin Developer
Plugin Developer
Posts: 789
Joined: 04 Feb 2006, 16:49
Location: Prague, Czech Republic

Post 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...
User avatar
Datalog
Posts: 244
Joined: 10 Dec 2005, 11:21
Location: Prague, Czech Republic
Contact:

Post 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.
Jan Rysavy
ALTAP Staff
ALTAP Staff
Posts: 5231
Joined: 08 Dec 2005, 06:34
Location: Novy Bor, Czech Republic
Contact:

Post 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.
Denis

Post 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...
Jan Rysavy
ALTAP Staff
ALTAP Staff
Posts: 5231
Joined: 08 Dec 2005, 06:34
Location: Novy Bor, Czech Republic
Contact:

Post 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.
Post Reply