Команда интеграции оболочки Windows не работает, возможна ошибка синтаксиса

670
barerd

Я хочу создать расширение оболочки для запуска блестящих приложений в локальном процессе на 64-битной Windows 7 Professional. Мне нужна команда, R -e "shiny::runApp('~/shinyapp')"как определено на блестящей учебной веб-странице . Я обычно создаю каталог, который называется shinyв каждой папке с данными. Таким образом, предполагаемая команда должна быть всегда такой:R -e "shiny::runApp('%1'/shiny) for me."

Поэтому я создал ключ с именем "Shine!" и подключ с именем "command" в HKEY_CLASSES_ROOT \ Directory \ shell со значением. C:\Program Files\R\R-2.15.1\bin\x64\R.exe -e "shiny::runApp('%1/shiny')"Структура dir в regedit выглядит следующим образом:

Команда интеграции оболочки Windows не работает, возможна ошибка синтаксиса

Теперь, когда я щелкаю правой кнопкой мыши папку данных (содержащую блестящую папку) и нажимаю «Shine!», Консоль R (консоль cmd) открывается и закрывается, но приложение не работает (приложения тщательно проверены и работают, Я также проверил команду regedit в cmd).

Если честно, я не знаю C, оболочку Windows или что-то в этом роде. Я проверил несколько вопросов, ссылок и документов, но предпочел найти простое решение без проверки ошибок (отсутствующая папка и т. Д.).

Я думаю, что здесь отсутствует синтаксическая ошибка, поэтому я попробовал несколько версий, таких как только '%1'и щелчок правой кнопкой мыши на блестящей папке, также версии, подобные '/'%1/'/shiny'и т.д. Что не так и что более важно, как я могу отладить щелчок правой кнопкой мыши с% 1 вещь, в то время как окно cmd закрывается так же быстро, как ад?

0

2 ответа на вопрос

0
Maximus

Use ProcessMonitor to determine exact arguments and working directory of R started. When you get these values - you can setup your debugger with same settings.

Вы имеете в виду [technet] (http://technet.microsoft.com/tr-tr/sysinternals/bb896645.aspx), верно? Я попробовал это и отфильтровал Имя процесса: Rterm.exe. Всякий раз, когда я щелкаю правой кнопкой мыши «Shine!», Номер процесса увеличивается на ~ 3600. Я постараюсь выучить этот инструмент, но сейчас он кажется мне излишним. barerd 11 лет назад 0
Почему вы говорите о Rterm.exe при запуске R.exe? Фильтровать вывод по операции. Это будет «Запуск процесса», насколько я помню («операция» - «содержит» - «процесс»). Это даст вам короткий список, который легко анализировать. Maximus 11 лет назад 0
О, я вижу, операция содержит запуск процесса, а затем в свойствах отображается вся среда, командная строка и т. Д. Я все еще ищу правильный синтаксис. barerd 11 лет назад 0
0
Eelco L.

% 1 расширяется оболочкой Windows до имени папки, по которой вы щелкнули правой кнопкой мыши.

Итак, если команда, которую вы хотите выполнить:

"C:\Program Files\R\R-2.15.1\bin\x64\R.exe" -e "shiny::runApp('%1/shiny')" 

Вы можете заменить его вызовом cmd.exe, который остается открытым после выполнения и сохраняет двойные кавычки (удваивая их внутри дополнительной пары двойных кавычек), так что вы можете проверить вывод команды r.exe:

cmd /k " ""C:\Program Files\R\R-2.15.1\bin\x64\R.exe"" -e ""shiny::runApp('%1/shiny')"" " 

У меня нет опыта работы с R, но я предполагаю, что команда runApp плохо работает с обратными слешами в пути Windows или содержит пробел, и я также предполагаю, что «~» работает с текущим каталогом, как это не делает Windows. у меня нет реального каталога $ HOME.

Решение для этого состоит в том, чтобы связать команду CD и вызов R.exe через cmd.exe:

cmd /c " cd /d ""%~1"" & ""C:\Program Files\R\R-2.15.1\bin\x64\R.exe"" -e ""shiny::runApp('~/shiny')"" " 

(cmd / c закрывает новое окно, cmd / k сохраняет его открытым после выполнения, поэтому последний пример закрывает окно после запуска R.exe).

Вы, вероятно, правы насчет ошибки пути Windows, но я не мог заставить `cmd / k` работать с кавычками. [Этот ответ] (http://stackoverflow.com/a/8714013/664404) говорит, что правильный формат для ключа / k - это что-то вроде `cmd / k" code "`. Я пытался `cmd / k" 'C: \ Program Files \ R \ R-2.15.1 \ bin \ R.exe' -e "блестящий :: runApp ('% 1')" "`, но также не работал , Я пытался избежать двойной кавычки с помощью ^ или "" в соответствии с [этим вопросом] (http://stackoverflow.com/q/7760545/664404). Не могли бы вы привести еще примеры? barerd 11 лет назад 0
Заключение sth в кавычки в двойные кавычки означает использование тройных кавычек вокруг многих вещей. Итак, теперь `cmd / c" cd% 1 & "" "C: \ Program Files \ R \ R-2.15.1 \ bin \ x64 \ R.exe" "" -e "" "блестящий :: runApp (" 'глянцевый' ")" "" "` работает, но ключ / c не закрывает окно cmd. На самом деле это не больно, это достаточно хорошо, чтобы мне не нужно было печатать все это целиком, но есть ли хитрость, чтобы закрыть окно cmd? barerd 11 лет назад 0