创建独立的闪亮应用程序 - Chrome错误

时间:2015-06-21 14:09:12

标签: r google-chrome batch-file shiny

我正在尝试按照这篇非常好的博文(http://www.r-bloggers.com/deploying-desktop-apps-with-r/)的指示创建一个闪亮的桌面应用程序

所以基本上我有一个具有以下结构的文件夹:

App
|__ GoogleChromePortable
     |__ App
     |__ Data
     |__ ...
 |__ R Portable
     |__ App
     |__ Data
     |__ ...
|__ shiny
     |__ ui.R
     |__ server.R
     |__ ...
|__ LAUNCH.bat/LAUNCH.vbs
|__ runShinyApp.R

我正在创建2个不同版本,一个使用GoogleChromePortable而另一个没有。除runShinyApp.R中的Chrome浏览器之外,这两个版本完全相同。

runShinyApp.R

# checking if correct library paths are being used (only portable one!)
message('library paths:\n', paste('... ', .libPaths(), sep='',     collapse='\n'))

# both chromes work!
chrome.sys = 'C:/Program Files (x86)/Google/Chrome/Application/chrome.exe'
chrome.portable = file.path(getwd(),
                        'GoogleChromePortable/App/Chrome-bin/chrome.exe')

launch.browser = function(appUrl, browser.path=chrome.portable) {
message('Browser path: ', browser.path)
shell(sprintf('"%s" --app=%s', browser.path, appUrl))
}

shiny::runApp('./shiny/', launch.browser=launch.browser)

该应用程序是通过.bat.vbs文件启动的,这些文件基本相同,但是第一个应用程序启用了Commander Prompt窗口。

LAUNCH.bat

SET ROPTS=--no-save --no-environ --no-init-file --no-restore --no-Rconsole
R-Portable\App\R-Portable\bin\Rscript.exe %ROPTS% runShinyApp.R 1> ShinyApp.log 2>&1

LAUNCH.vbs

Rexe           = "R-Portable\App\R-Portable\bin\Rscript.exe"
Ropts          = "--no-save --no-environ --no-init-file --no-restore --no-   Rconsole"
RScriptFile    = "runShinyApp.R"
Outfile        = "ShinyApp.log" 
strCommand     = Rexe & " " & Ropts & " " & RScriptFile & " 1> " & Outfile & " 2>&1"

intWindowStyle = 0     ' Hide the window and activate another window.'
bWaitOnReturn  = False ' continue running script after launching R   '

 ' the following is a Sub call, so no parentheses around arguments'
CreateObject("Wscript.Shell").Run strCommand, intWindowStyle, bWaitOnReturn

问题:

我遇到的问题出现在两个版本中,如下所示。

如果我的系统上安装了普通的Chrome(不是便携版),那么闪亮的应用就会毫无问题地启动。它打开一个新窗口,完全只包含闪亮的应用程序。

但是,如果我打开Chrome会话(默认设置),那么闪亮的版本似乎都无法正常工作。窗口打开但永远加载。 查看创建的日志,我收到以下错误:

[4092:3596:0621/154834:ERROR:url_pattern_set.cc(240)] Invalid url pattern: chrome://print/*
[4092:3596:0621/154834:ERROR:bluetooth_adapter_win.cc(102)] NOT IMPLEMENTED

知道这里似乎有什么问题吗?

2 个答案:

答案 0 :(得分:7)

我已经通过对 run.vbs runShinyApp.R 进行一些更改来解决这个问题。

<强> run.vbs:

Rexe           = "R-Portable\App\R-Portable\bin\R.exe CMD BATCH"
Ropts          = "--no-save --no-environ --no-init-file --no-restore --no-Rconsole "
RScriptFile    = "runShinyApp.R"
Outfile        = "ShinyApp.log"
startChrome    = "GoogleChromePortable\Chrome\chrome.exe --app=http://127.0.0.1:7777"
strCommand     = Rexe & " " & Ropts & " " & RScriptFile & " 1> " & Outfile & " 2>&1"

intWindowStyle = 0     ' Hide the window and activate another window.'
bWaitOnReturn  = False ' continue running script after launching R   '

' the following is a Sub call, so no parentheses around arguments'

CreateObject("Wscript.Shell").Run strCommand, intWindowStyle, bWaitOnReturn
CreateObject("Wscript.Shell").Run startChrome, intWindowStyle, bWaitOnReturn

我添加了startChrome变量并在启动服务器后调用CreateObject ,因为否则没有网站,Chrome会在您之后启动时自动重新加载。通常启动服务器应该足够快,但如果你在一台非常慢的机器上,它可能需要很长时间。然后,您需要在两个CreateObject来电之间添加延迟。

--app设置会在没有所有Google Chrome按钮的窗口中打开应用,然后它看起来就像一个独立的应用。

<强> runShinyApp.R:

require(shiny)
shiny::runApp('./shiny/',port=7777)

端口7777是任意的,您可以使用您喜欢的任何免费端口。所有文件中的端口必须相同。

如果您想使用 bat 文件:

SET ROPTS=--no-save --no-environ --no-init-file --no-restore --no-Rconsole
start /b GoogleChromePortable\Chrome\chrome.exe --app=http://127.0.0.1:7777
R-Portable\App\R-Portable\bin\R.exe CMD BATCH %ROPTS% runShinyApp.R 1> ShinyAppOut.log 2> ShinyAppMsg.log

答案 1 :(得分:4)

在开发基于Lee Pang博士的DesktopDeployR框架的RInno软件包时,我因为这样的问题而放弃使用便携版Chrome。该软件包有助于实现自动化,并集成了Inno Setup安装程序,以便非技术用户可以安装和使用您的Shiny应用程序。

开始使用:

install.packages("RInno")
require(RInno)
RInno::install_inno()

然后你只需要调用两个函数来创建一个安装框架:

create_app(app_name = "myapp", app_dir = "path/to/myapp")
compile_iss()

如果您希望为未安装R的同事添加R,请将include_R = TRUE添加到create_app

create_app(app_name = "myapp", app_dir = "path/to/myapp", include_R = TRUE)

默认包含shiny,magrittr和jsonlite,因此如果您使用ggplot2或plotly等其他包,只需将它们添加到pkgs参数即可。您还可以将GitHub包包含在remotes参数中:

create_app(
    app_name = "myapp", 
    app_dir  = "path/to/myapp"
    pkgs     = c("shiny", "jsonlite", "magrittr", "plotly", "ggplot2"),
    remotes  = c("talgalili/installr", "daattali/shinyjs"))

如果您对其他功能感兴趣,请查看FI Labs - RInno