Вызов Exec и двойные кавычки

Russian main discussion
  • Author
  • Message
Offline
Posts: 267
Joined: Mon Mar 12, 2007 3:45 pm

Вызов Exec и двойные кавычки

Post by [Yustas.NeO] »

Как правильно составить вызов Exec, если вызываемая программа требует жестко "двойные кавычки" в параметре своей командной строки, а AkelPad воспринимает первую же из них как завершение параметров Exec?

Offline
Site Admin
Posts: 6311
Joined: Thu Jul 06, 2006 7:20 am

Post by Instructor »

[Yustas.NeO]
Использовать ` и '. В документации к Exec() же есть примеры.

Offline
Posts: 267
Joined: Mon Mar 12, 2007 3:45 pm

Post by [Yustas.NeO] »

Да, прошу прощения, недоглядел.

Offline
Posts: 876
Joined: Tue Jul 24, 2007 8:54 am

Post by Fr0sT »

А стандартный \" не работает?

Offline
Posts: 2247
Joined: Tue Aug 07, 2007 2:03 pm
Location: Vinnitsa, Ukraine

Post by FeyFre »

Fr0sT
А стандартный \" не работает?
А не подскажите по какому стандарту? Даже если подскажите - вы уверенны что Интсруктор делает это именно по этому стандарту?
ESC последовательность \" описанная в стандартах C/C++ применима только для тех, кто пишет трансляторы C/C++. Это же касается других всевозможных стандартов. Инструктор вроде бы не заявлял что АкелПад подчиняется какому-то конкретному стандарту. Потому не стоит удивляться что оно не делает то, что не обязано делать(в данному случае не слэш назад ескейпит ограничитель литерала)

Offline
Posts: 876
Joined: Tue Jul 24, 2007 8:54 am

Post by Fr0sT »

FeyFre продолжаем цепляться к словам?
Стандарт для языка, на котором создан Акель, и для функций *printf, которые наверняка используются при преобразовании строки для Exec.
Кроме того, эскейп слэшами широко используется и в С-подобных языках, как-то JS, Php и др.

Offline
Posts: 2247
Joined: Tue Aug 07, 2007 2:03 pm
Location: Vinnitsa, Ukraine

Post by FeyFre »

Стандарт для языка, на котором создан Акель, и для функций *printf, которые наверняка используются при преобразовании строки для Exec.
Не используют :Р
Кроме того, эскейп слэшами широко используется и в С-подобных языках, как-то JS, Php и др.
И?
Какое отношение имеет упомянутый стандарт к сабжу? Или быть может Вы ещё вспомните о стандарте составления чертежей, которым пользовались при проектировании стула, сидя на котором Инструктор писал АкелПад?
Ескейп последовательности С-стиля нигде не заявлены и не упомянуты. Более того в примерах четко поставлено ударение что для кавычко-содержащих аргументов нужно использовать альтернативные кавычки(что широко используется в тех же самых JS, PHP и др)

Offline
Posts: 876
Joined: Tue Jul 24, 2007 8:54 am

Post by Fr0sT »

Какое отношение имеет упомянутый стандарт к сабжу?
Думаю, не ошибусь, если скажу, что большинство активных пользователей сабжа, которые не ленятся править конфиги, так или иначе связаны с кодингом. А для кодера, по-моему, эскейпить слэшем - первое, что приходит в голову. Впрочем, если printf действительно не используется, то в самом деле не стоит напрягаться, чтобы включить поддержку слэшей. Я-то думал, это из коробки получится.

Offline
Posts: 2247
Joined: Tue Aug 07, 2007 2:03 pm
Location: Vinnitsa, Ukraine

Post by FeyFre »

Думаю, не ошибусь, если скажу, что большинство активных пользователей сабжа, которые не ленятся править конфиги, так или иначе связаны с кодингом.
Согласен
А для кодера, по-моему, эскейпить слэшем - первое, что приходит в голову.
А вот тут не согласен. Кодеры, которые это в первое что приходит в голову(т.е. C/C++) в блокноте не пишут, а если и пишут, то им точно ескейпинг не требуется, ибо для более менее сложных задач они логично выбирают IDE. Не C/C++ кодеры же с ескейпингом встречаются очень и очень редко(и в PHP, и в JS они просто выбирают альтернативный вид кавычек, ибо нагромождение `\` - очень не читаемая вещь)
Впрочем, если printf действительно не используется, то в самом деле не стоит напрягаться, чтобы включить поддержку слэшей. Я-то думал, это из коробки получится.
Даже если бы использовалось, разницы никакой бы не было. \" - обрабатывается компилятором, а не libcmt, и в любом случае пришлось бы делать вручную.(Помоему Вы спутали уровни абстракции)

Offline
Posts: 876
Joined: Tue Jul 24, 2007 8:54 am

Post by Fr0sT »

Кодеры, которые это в первое что приходит в голову(т.е. C/C++) в блокноте не пишут, а если и пишут, то им точно ескейпинг не требуется, ибо для более менее сложных задач они логично выбирают IDE
Причем тут где они пишут? Я говорил о привычке.
и в PHP, и в JS они просто выбирают альтернативный вид кавычек, ибо нагромождение `\` - очень не читаемая вещь
Это субъективно, по мне уж лучше эскейпленные кавычки, чем мешанина из трёх видов.
Даже если бы использовалось, разницы никакой бы не было. \" - обрабатывается компилятором, а не libcmt, и в любом случае пришлось бы делать вручную.(Помоему Вы спутали уровни абстракции)
Вот здесь вообще ничего не понял, какие уровни абстракции, какой libcmt.

Offline
Posts: 670
Joined: Thu Jun 03, 2010 8:47 am
Location: Сочи, Хоста
Contact:

Метод Exec(...)

Post by Andrey_A_A »

Можно ли подправить метод, чтобы запускались команды подобные этим

Exec('%WINDIR%\System32\services.msc`)
Exec('%WINDIR%\SYSTEM32\control.exe userpasswords`)
Exec('%WINDIR%\system32\Firewall.cpl`)
Exec('%WINDIR%\system32\control.exe /name Microsoft.WindowsDefender`)
Exec('%WINDIR%\System32\perfmon.exe /rel`)
Exec('%WINDIR%\SYSTEM32\control.exe admintools`)
Exec('%WINDIR%\SYSTEM32\rundll32.exe shell32,Control_RunDLL appwiz.cpl,,2`)
или может я не правильно записываю, тогда подскажите синтаксис

ещё один нюанс. некоторые команды срабатывают не правильно
к примеру
"Безопасное извлечение" Exec('%WINDIR%\System32\rundll32.exe shell32.dll,Control_RunDLL hotplug.dll.`)
и ещё, если вставить это в меню в тулбар , то после этой команды другие не отображаются, как-то странно

Offline
Posts: 3217
Joined: Wed Nov 29, 2006 1:19 pm
Location: Киев, Русь
Contact:

Post by VladSh »

Я думаю, правильно будет так:

Code: Select all

"Безопасное извлечение" Exec(`%WINDIR%\System32\rundll32.exe shell32.dll, Control_RunDLL hotplug.dll`)
т.е.
1. открывающий символ строки должен совпадать с закрывающим;
2. в конце строки не должно быть точки.

P.S. Думаю, что вопрос относится к ContextMenu-плагину.

Offline
Posts: 1862
Joined: Mon Aug 06, 2007 1:07 pm
Contact:

Post by Infocatcher »

Тогда уж, на случай пробелов в %windir% (хотя их там быть, вроде бы, не должно):

Code: Select all

"Безопасное извлечение" Exec(`"%WINDIR%\System32\rundll32.exe" shell32.dll, Control_RunDLL hotplug.dll`)

Offline
Posts: 670
Joined: Thu Jun 03, 2010 8:47 am
Location: Сочи, Хоста
Contact:

Post by Andrey_A_A »

Спасибо, разобрался! Выложил системное меню
с почти со всеми разными вариантами Exec(...)
viewtopic.php?p=11127#p11127

Offline
Posts: 670
Joined: Thu Jun 03, 2010 8:47 am
Location: Сочи, Хоста
Contact:

Post by Andrey_A_A »

Есть ли в методе Exec функция "запуск приложения в свёрнутом виде"
пример, я запускаю команду
"Завершить процесс Wscript.exe" Exec("%ComSpec% /c taskkill /f /im wscript.exe") Icon("%a\AkelPadImage.dll",528)
хотелось бы, чтобы командная консоль не появлялась центре окна, т.е. запуск в свёрнутом виде...
Post Reply