View Issue Details
ID | Project | Category | View Status | Date Submitted | Last Update |
---|---|---|---|---|---|
0001953 | Far Manager | Command Line/Execute | public | 2011-12-23 16:29 | 2012-11-18 20:08 |
Reporter | Maximus | Assigned To | DrKnS | ||
Priority | normal | Severity | minor | Reproducibility | have not tried |
Status | closed | Resolution | fixed | ||
Product Version | 3.0 | ||||
Fixed in Version | 3.0 | ||||
Summary | 0001953: Лишний вызов cmd.exe | ||||
Description | Если _консольную_ программу запускать Enter-ом из панелей - все ок. А вот если в ком строке набрать far.exe /p то зачем-то найденная консольная программа C:\...\far.exe запускается как cmd.exe /c C:\...\far.exe Если же жать ShiftEnter - фар окажется не корневым процессом и иконка будет cmd-шная | ||||
Tags | No tags attached. | ||||
Build | 2324 | ||||
|
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; |
|
что из выше озвученного бага? что дает патч? |
|
Патч убирает subj. Т.е. "Лишний вызов cmd.exe" что в свою очередь убирает все вышеозвученное |
|
build 2319 |
|
Господа, иконки - это, безусловно, прекрасно, но прежде чем убирать "лишние вызовы", убедитесь, что они действительно лишние. Хинт: ping 127.0.0.1|find "Sent" |
|
тогда так |
|
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; |
|
> тогда так Ага, как-то так. И, наверное, это надо делать независимо от dwSubSystem == IMAGE_SUBSYSTEM_WINDOWS_CUI, т. к. ситуации типа "notepad && regedit" тоже возможны. |
|
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; |
|
так? |
|
2324 |
|
может if (!DirectRun && ....) if (DirectRun && !CmdStr.ContainsAny(ComspecSpecific)) { DirectRun = true; } |
|
Ага, спасибо. |
|
ok |
|
таки запуск GUI-приложения через "cmd /c" если в строке есть "&" - некорректен. например, ассоциация C:\Utils\Viewers\JPEGView\JPEGView.exe "!\!.!" обламывается - если в пути к файлу есть "&" появляется окно cmd.exe |
|
Ты будешь писать парсер ком строки эквивалентный cmd, чтоб отличал пайпы и т.п. от просто символов в строке? |
|
Мыслей две 1. если приложение гуевое - не проверять наличие "&" в строке ("<>|" - пусть проверяются), юзер может при желании специально указать компроцессор, например "cmd /c gui.exe & bla-bla-bla". Только "&" из процессорных символов допустим в путях. 2. можно заюзать CommandLineToArgvW, поставив условие что перед и после "&" должны быть пробелы. |
|
Хотя не... может если уж решили запускать "cmd /c" чтобы он конвейерил гуевое приложение, запускать его в консоли фара, как консольное приложение? А не создавать новую консоль? |
|
если фар сам решает 'нужно ли использовать cmd.exe для выполнения команды', то надо это делать правильно, т.е. парсер действительно нужен. либо надо дать возможность сделать этот выбор пользователю, в случае с ассоциациями - просто добавить птичку в диалог. |
|
Возможно, изменения поменяли поведение Фара при запуске "скаченных из инета" прог: http://forum.farmanager.com/viewtopic.php?f=9&t=6919 Баг это или фича, решайте, но быть в курсе полезно в любом случае. |
|
связанный оффтоп: set /? -- результат не виден set "t=value" -- переменная не создаётся set /a t=2+3 -- печатает 5, переменной нет, так и задумано? set /p t=t: -- текст вводится, но переменная не устанавливается |
|
>C:\Utils\Viewers\JPEGView\JPEGView.exe "!\!.!" >обламывается - если в пути к файлу есть "&" появляется окно cmd.exe Вероятно фар просто не экранирует эти символы. А мог бы. |
|
2431 надо проверить, что не появилось неожиданных побочных эффектов :) |
|
>2431 А что именно правилось? |
|
subj, в том числе последняя жалоба JohnDoe (не игнорируются кавычки). плюс 'set /?' должен работать. |
|
Последняя жалоба на самом деле от Maximus (http://bugs.farmanager.com/view.php?id=1953#c8463) ... А раз пошли такие правки был то напомню что был ещё такой несправедливо закрытый тикет: 0000825 |
|
Ну нормально решить задачу можно, только встроив cmd в far. Сейчас это набор заплаток. Наверное можно сделать лучше, регулярные выражения тут могли бы помочь. Но в любом случае, это совершенно отдельный виш. Или отдельный плагин :) |
|
>Но в любом случае, это совершенно отдельный виш Тогда прошу открыть его обратно (ибо закрыт он по всей видимости случайно) |
|
>...нормально решить задачу можно, только встроив cmd в far. А что если пойти от обратного: те случаи где фар затрудняется - передавать cmd. (Например если в командной строке присутствуют символы "()<>$|") P.S. Именно это предлагается в 0000876 для "встроенных" команд. |
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 |