View Issue Details

IDProjectCategoryView StatusLast Update
0001953Far ManagerCommand Line/Executepublic2012-11-19 00:08
ReporterMaximusAssigned ToDrKnS 
PrioritynormalSeverityminorReproducibilityhave not tried
Status closedResolutionfixed 
Product Version3.0 
Target VersionFixed 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 20: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 19:31

administrator   bugnote:0008232

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

Maximus

2011-12-24 19:54

reporter   bugnote:0008234

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

vskirdin

2011-12-24 20:19

administrator   bugnote:0008238

build 2319

DrKnS

2011-12-24 20:54

administrator   bugnote:0008239

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

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

Maximus

2011-12-24 21:34

reporter   bugnote:0008242

тогда так

Maximus

2011-12-24 21: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 21:58

administrator   bugnote:0008243

> тогда так

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

Maximus

2011-12-24 22: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 22:20

reporter   bugnote:0008244

так?

DrKnS

2011-12-24 23:41

administrator   bugnote:0008245

2324

2useven10

2011-12-25 01:46

developer   bugnote:0008246

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

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

DrKnS

2011-12-25 01:52

administrator   bugnote:0008247

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

Maximus

2011-12-25 15:38

reporter   bugnote:0008249

ok

Maximus

2012-01-19 23:07

reporter   bugnote:0008463

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

alexy

2012-01-19 23:23

administrator   bugnote:0008464

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

Maximus

2012-01-20 00:53

reporter   bugnote:0008465

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

Maximus

2012-01-20 02:47

reporter   bugnote:0008466

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

2useven10

2012-01-20 07:45

developer   bugnote:0008467

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

NightRoman

2012-01-30 18:56

reporter   bugnote:0008502

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

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

2useven10

2012-01-31 13:53

developer   bugnote:0008504

Last edited: 2012-02-02 13:20

View 3 revisions

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

JohnDoe

2012-01-31 17:00

updater   bugnote:0008511

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

2useven10

2012-02-02 12:47

developer   bugnote:0008523

Last edited: 2012-02-02 13:10

View 4 revisions

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

JohnDoe

2012-02-02 13:48

updater   bugnote:0008524

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

2useven10

2012-02-02 14:00

developer   bugnote:0008525

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

JohnDoe

2012-02-02 15:57

updater   bugnote:0008527

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

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

2useven10

2012-02-02 17:04

developer   bugnote:0008530

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

JohnDoe

2012-02-02 17:28

updater   bugnote:0008531

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

JohnDoe

2012-02-02 17:34

updater   bugnote:0008532

Last edited: 2012-02-02 18:42

View 2 revisions

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

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

Issue History

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