View Issue Details

IDProjectCategoryView StatusLast Update
0001953Far ManagerCommand Line/Executepublic2012-11-18 20:08
ReporterMaximus Assigned ToDrKnS  
PrioritynormalSeverityminorReproducibilityhave not tried
Status closedResolutionfixed 
Product Version3.0 
Fixed in Version3.0 
Summary0001953: Лишний вызов cmd.exe
DescriptionЕсли _консольную_ программу запускать Enter-ом из панелей - все ок.
А вот если в ком строке набрать
far.exe /p
то зачем-то найденная консольная программа C:\...\far.exe запускается как
cmd.exe /c C:\...\far.exe

Если же жать ShiftEnter - фар окажется не корневым процессом и иконка будет cmd-шная
TagsNo tags attached.
Build2324

Activities

Maximus

2011-12-23 16:31

reporter  

execute.111223.diff (370 bytes)   
Index: execute.cpp
===================================================================
--- execute.cpp	(revision 7021)
+++ execute.cpp	(working copy)
@@ -910,6 +910,10 @@
 			DirectRun = true;
 			SeparateWindow = true;
 		}
+		else if (dwSubSystem == IMAGE_SUBSYSTEM_WINDOWS_CUI && !DirectRun)
+		{
+			DirectRun = true;
+		}
 	}
 
 	bool Visible=false;
execute.111223.diff (370 bytes)   

vskirdin

2011-12-24 15:31

administrator   bugnote:0008232

что из выше озвученного бага?
что дает патч?

Maximus

2011-12-24 15:54

reporter   bugnote:0008234

Патч убирает subj.
Т.е. "Лишний вызов cmd.exe"
что в свою очередь убирает все вышеозвученное

vskirdin

2011-12-24 16:19

administrator   bugnote:0008238

build 2319

DrKnS

2011-12-24 16:54

administrator   bugnote:0008239

Господа, иконки - это, безусловно, прекрасно, но прежде чем убирать "лишние вызовы", убедитесь, что они действительно лишние.

Хинт:
ping 127.0.0.1|find "Sent"

Maximus

2011-12-24 17:34

reporter   bugnote:0008242

тогда так

Maximus

2011-12-24 17:34

reporter  

execute.111224.diff (417 bytes)   
Index: execute.cpp
===================================================================
--- execute.cpp	(revision 7052)
+++ execute.cpp	(working copy)
@@ -910,6 +910,11 @@
 			DirectRun = true;
 			SeparateWindow = true;
 		}
+		else if (dwSubSystem == IMAGE_SUBSYSTEM_WINDOWS_CUI && !DirectRun)
+		{
+			if (wcspbrk(CmdStr, L"&<>|") == nullptr)
+				DirectRun = true;
+		}
 	}
 
 	bool Visible=false;
execute.111224.diff (417 bytes)   

DrKnS

2011-12-24 17:58

administrator   bugnote:0008243

> тогда так

Ага, как-то так.
И, наверное, это надо делать независимо от dwSubSystem == IMAGE_SUBSYSTEM_WINDOWS_CUI, т. к. ситуации типа "notepad && regedit" тоже возможны.

Maximus

2011-12-24 18:20

reporter  

execute.ver3.diff (522 bytes)   
Index: execute.cpp
===================================================================
--- execute.cpp	(revision 7052)
+++ execute.cpp	(working copy)
@@ -907,9 +907,15 @@
 			{
 				Silent = true;
 			}
-			DirectRun = true;
+			if (wcspbrk(CmdStr, L"&<>|") == nullptr)
+				DirectRun = true;
 			SeparateWindow = true;
 		}
+		else if (dwSubSystem == IMAGE_SUBSYSTEM_WINDOWS_CUI && !DirectRun)
+		{
+			if (wcspbrk(CmdStr, L"&<>|") == nullptr)
+				DirectRun = true;
+		}
 	}
 
 	bool Visible=false;
execute.ver3.diff (522 bytes)   

Maximus

2011-12-24 18:20

reporter   bugnote:0008244

так?

DrKnS

2011-12-24 19:41

administrator   bugnote:0008245

2324

2useven10

2011-12-24 21:46

developer   bugnote:0008246

может if (!DirectRun && ....)

            if (DirectRun && !CmdStr.ContainsAny(ComspecSpecific))
            {
                DirectRun = true;
            }

DrKnS

2011-12-24 21:52

administrator   bugnote:0008247

Ага, спасибо.

Maximus

2011-12-25 11:38

reporter   bugnote:0008249

ok

Maximus

2012-01-19 19:07

reporter   bugnote:0008463

таки запуск GUI-приложения через "cmd /c" если в строке есть "&" - некорректен.
например, ассоциация
C:\Utils\Viewers\JPEGView\JPEGView.exe "!\!.!"
обламывается - если в пути к файлу есть "&" появляется окно cmd.exe

alexy

2012-01-19 19:23

administrator   bugnote:0008464

Ты будешь писать парсер ком строки эквивалентный cmd, чтоб отличал пайпы и т.п. от просто символов в строке?

Maximus

2012-01-19 20:53

reporter   bugnote:0008465

Мыслей две
1. если приложение гуевое - не проверять наличие "&" в строке ("<>|" - пусть проверяются), юзер может при желании специально указать компроцессор, например "cmd /c gui.exe & bla-bla-bla". Только "&" из процессорных символов допустим в путях.
2. можно заюзать CommandLineToArgvW, поставив условие что перед и после "&" должны быть пробелы.

Maximus

2012-01-19 22:47

reporter   bugnote:0008466

Хотя не... может если уж решили запускать "cmd /c" чтобы он конвейерил гуевое приложение, запускать его в консоли фара, как консольное приложение? А не создавать новую консоль?

2useven10

2012-01-20 03:45

developer   bugnote:0008467

если фар сам решает 'нужно ли использовать cmd.exe для выполнения команды', то надо это делать правильно, т.е. парсер действительно нужен. либо надо дать возможность сделать этот выбор пользователю, в случае с ассоциациями - просто добавить птичку в диалог.

NightRoman

2012-01-30 14:56

reporter   bugnote:0008502

Возможно, изменения поменяли поведение Фара при запуске "скаченных из инета" прог:
http://forum.farmanager.com/viewtopic.php?f=9&t=6919

Баг это или фича, решайте, но быть в курсе полезно в любом случае.

2useven10

2012-01-31 09:53

developer   bugnote:0008504

Last edited: 2012-02-02 09:20

связанный оффтоп:
set /? -- результат не виден
set "t=value" -- переменная не создаётся
set /a t=2+3 -- печатает 5, переменной нет, так и задумано?
set /p t=t: -- текст вводится, но переменная не устанавливается

JohnDoe

2012-01-31 13:00

updater   bugnote:0008511

>C:\Utils\Viewers\JPEGView\JPEGView.exe "!\!.!"
>обламывается - если в пути к файлу есть "&" появляется окно cmd.exe
Вероятно фар просто не экранирует эти символы. А мог бы.

2useven10

2012-02-02 08:47

developer   bugnote:0008523

Last edited: 2012-02-02 09:10

2431
надо проверить, что не появилось неожиданных побочных эффектов :)

JohnDoe

2012-02-02 09:48

updater   bugnote:0008524

>2431
А что именно правилось?

2useven10

2012-02-02 10:00

developer   bugnote:0008525

subj, в том числе последняя жалоба JohnDoe (не игнорируются кавычки).
плюс 'set /?' должен работать.

JohnDoe

2012-02-02 11:57

updater   bugnote:0008527

Последняя жалоба на самом деле от Maximus (http://bugs.farmanager.com/view.php?id=1953#c8463)
...

А раз пошли такие правки был то напомню что был ещё такой несправедливо закрытый тикет: 0000825

2useven10

2012-02-02 13:04

developer   bugnote:0008530

Ну нормально решить задачу можно, только встроив cmd в far. Сейчас это набор заплаток. Наверное можно сделать лучше, регулярные выражения тут могли бы помочь. Но в любом случае, это совершенно отдельный виш. Или отдельный плагин :)

JohnDoe

2012-02-02 13:28

updater   bugnote:0008531

>Но в любом случае, это совершенно отдельный виш
Тогда прошу открыть его обратно (ибо закрыт он по всей видимости случайно)

JohnDoe

2012-02-02 13:34

updater   bugnote:0008532

Last edited: 2012-02-02 14:42

>...нормально решить задачу можно, только встроив cmd в far.
А что если пойти от обратного: те случаи где фар затрудняется - передавать cmd.
(Например если в командной строке присутствуют символы "()<>$|")

P.S.
Именно это предлагается в 0000876 для "встроенных" команд.

Issue History

Date Modified Username Field Change
2011-12-23 16:29 Maximus New Issue
2011-12-23 16:31 Maximus File Added: execute.111223.diff
2011-12-24 15:31 vskirdin Note Added: 0008232
2011-12-24 15:54 Maximus Note Added: 0008234
2011-12-24 16:19 vskirdin Note Added: 0008238
2011-12-24 16:19 vskirdin Assigned To => vskirdin
2011-12-24 16:19 vskirdin Status new => feedback
2011-12-24 16:54 DrKnS Note Added: 0008239
2011-12-24 16:55 DrKnS Build => 0
2011-12-24 16:55 DrKnS Status feedback => closed
2011-12-24 16:55 DrKnS Assigned To vskirdin =>
2011-12-24 16:55 DrKnS Resolution open => no change required
2011-12-24 17:34 Maximus Note Added: 0008242
2011-12-24 17:34 Maximus Status closed => feedback
2011-12-24 17:34 Maximus Resolution no change required => reopened
2011-12-24 17:34 Maximus File Added: execute.111224.diff
2011-12-24 17:58 DrKnS Note Added: 0008243
2011-12-24 18:20 Maximus File Added: execute.ver3.diff
2011-12-24 18:20 Maximus Note Added: 0008244
2011-12-24 18:20 Maximus Status feedback => new
2011-12-24 19:41 DrKnS Note Added: 0008245
2011-12-24 19:41 DrKnS Assigned To => DrKnS
2011-12-24 19:41 DrKnS Status new => feedback
2011-12-24 21:46 2useven10 Note Added: 0008246
2011-12-24 21:52 DrKnS Note Added: 0008247
2011-12-25 11:38 Maximus Note Added: 0008249
2011-12-25 11:38 Maximus Status feedback => assigned
2011-12-25 11:38 Maximus Status assigned => resolved
2011-12-25 12:28 DrKnS Build 0 => 2324
2011-12-25 12:28 DrKnS Status resolved => closed
2011-12-25 12:28 DrKnS Resolution reopened => fixed
2011-12-25 12:28 DrKnS Fixed in Version => 3.0
2012-01-19 19:07 Maximus Note Added: 0008463
2012-01-19 19:07 Maximus Status closed => feedback
2012-01-19 19:07 Maximus Resolution fixed => reopened
2012-01-19 19:23 alexy Note Added: 0008464
2012-01-19 20:53 Maximus Note Added: 0008465
2012-01-19 20:53 Maximus Status feedback => assigned
2012-01-19 22:47 Maximus Note Added: 0008466
2012-01-20 03:45 2useven10 Note Added: 0008467
2012-01-30 14:56 NightRoman Note Added: 0008502
2012-01-31 09:53 2useven10 Note Added: 0008504
2012-01-31 13:00 JohnDoe Note Added: 0008511
2012-01-31 21:27 2useven10 Note Edited: 0008504
2012-02-02 08:47 2useven10 Note Added: 0008523
2012-02-02 08:47 2useven10 Status assigned => feedback
2012-02-02 08:48 2useven10 Note Edited: 0008523
2012-02-02 09:09 2useven10 Note Edited: 0008523
2012-02-02 09:10 2useven10 Note Edited: 0008523
2012-02-02 09:20 2useven10 Note Edited: 0008504
2012-02-02 09:48 JohnDoe Note Added: 0008524
2012-02-02 10:00 2useven10 Note Added: 0008525
2012-02-02 11:57 JohnDoe Note Added: 0008527
2012-02-02 13:04 2useven10 Note Added: 0008530
2012-02-02 13:28 JohnDoe Note Added: 0008531
2012-02-02 13:34 JohnDoe Note Added: 0008532
2012-02-02 14:42 JohnDoe Note Edited: 0008532
2012-11-18 20:08 DrKnS Status feedback => closed
2012-11-18 20:08 DrKnS Resolution reopened => fixed