RInno блестящее приложение не может запуститься, если предыдущий сеанс неожиданно закрылся - PullRequest
1 голос
/ 15 января 2020

Я сделал блестящее настольное приложение для windows, используя удивительный пакет RInno , но у меня возникли некоторые несоответствия при запуске приложения. Время от времени приложение не завершает свой сеанс должным образом, оставляя R в фоновом режиме. Их github предлагает использовать этот кусок кода в функции сервера, чтобы обеспечить правильное завершение R при завершении сеанса. Я могу сказать, когда приложение завершает работу должным образом, потому что я включаю пользовательскую функцию, которая копирует файлы журнала в новое индексированное имя для записей и отладки.

if (!interactive()) {
session$onSessionEnded(function() {
  write_logs_out() #My custom function. renames logs and stores backups of session data in .rds files
  stopApp()
  q("no")
 })
}

В этих случаях новый файл журнала не создается, поэтому я предполагаю, что stopApp() и q("no") также никогда не выполняются, оставляя R в фоновом режиме. Одна из основных проблем - я не знаю, как воспроизвести эту ошибку. Мое текущее предположение состоит в том, что это происходит, когда сеанс R локально перестает отвечать. Пока R все еще работает в фоновом режиме, блестящее приложение никогда полностью не открывается в веб-браузере. Сначала мне нужно будет открыть диспетчер задач и выйти из любых сессий R (обычно с именем «front-end R»), чтобы приложение снова заработало.

Поскольку я не знаю, как ожидать эту случайную ошибку Мне было интересно, могут ли какие-нибудь эксперты windows помочь мне написать скрипт, который проверит, запущен ли процесс R, а затем уничтожит его. Это, по крайней мере,

Я знаю, что

tasklist | findstr Rscript.exe

перечислит все текущие Rscripts, работающие (я считаю, что это "R front-end", который я вижу в диспетчере задач), но я не знаю, является ли плохой практикой просто включать taskkill /IM "Rscript.exe" /F перед строкой, которая вызывает файл .wsf, запускающий приложение.

Основная проблема, которую я вижу в этом, заключается в том, что если сессия работает нормально и пользователь по какой-то причине снова щелкает приложение, оно принудительно перезапускается.

Есть предложения?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...