Ewo*_*oud 9 google-chrome r 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
Run Code Online (Sandbox Code Playgroud)
我正在创建2个不同版本,一个使用GoogleChromePortable而另一个没有.两个版本完全相同,只是Chrome的路径runShinyApp.R.
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)
Run Code Online (Sandbox Code Playgroud)
该应用程序通过一个.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
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
问题:
我遇到的问题出现在两个版本中,如下所示.
如果我在我的系统上安装了普通的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
Run Code Online (Sandbox Code Playgroud)
知道这里似乎有什么问题吗?
我通过对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
Run Code Online (Sandbox Code Playgroud)
我在启动服务器后添加了startChrome变量和调用,因为否则没有网站,Chrome会在您之后启动时自动重新加载.通常启动服务器应该足够快,但如果你在一台非常慢的机器上,它可能需要很长时间.然后,您需要在两次调用之间添加延迟.CreateObject CreateObject
--app设置会在没有所有Google Chrome按钮的窗口中打开应用,然后它看起来就像一个独立的应用.
runShinyApp.R:
require(shiny)
shiny::runApp('./shiny/',port=7777)
Run Code Online (Sandbox Code Playgroud)
端口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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3873 次 |
| 最近记录: |