【发布时间】:2017-06-09 01:00:24
【问题描述】:
我构建了一个复杂的 Shiny 界面,该界面从内部联网的 ODBC 表中提取,并允许用户通过浏览器与数据进行交互。该公司在 Windows 7 Enterprise 上,IT 仅支持 IE 9。有些用户在他们的用户文件夹中安装了 chrome,有些用户安装了 firefox,有些使用 IE 9。我按照 R-Bloggers 的教程(这里:http://www.r-bloggers.com/deploying-desktop-apps-with-r/)和它使用从 PortableApps.com 下载的便携式 Chrome 浏览器在我的机器上运行。伟大的。不幸的是,该界面尚未在安装了自己的本地 Chrome 浏览器的任何其他人的机器上启动。
按照教程,我使用以下 vb 脚本:
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 '
CreateObject("Wscript.Shell").Run strCommand, intWindowStyle, bWaitOnReturn
此脚本在我的 R 文件中调用以下代码:
message('library paths:\n', paste('... ', .libPaths(), sep='', collapse='\n'))
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)
它在我的电脑上运行得很好......我在本地安装了 chrome,但我调用的是便携式 Chrome 可执行文件。让我担心的是,这两个人正在共享偏好或其他东西,例如我注意到我安装的版本中的首选项文件中的哈希值,特别是:
"chrome_url_overrides": {
"bookmarks": [ "chrome-extension://eemcgdkfndhakfknompkggombfjjjeno/main.html" ]
},
...与便携式 Chrome 安装中的相同 json 条目匹配:
"chrome_url_overrides": {
"bookmarks": [ "chrome-extension://eemcgdkfndhakfknompkggombfjjjeno/main.html" ]
}
为什么这些长的随机字符串匹配?我是否因为想知道这一点而吠叫错误的树?如果它们是 Chrome 可执行文件的两个单独安装,我不知道为什么这些字符串匹配,其中一个应该完全独立于机器上的任何东西运行。
这是来自一台机器的一组错误:
.../Desktop/TestApp3/GoogleChromePortable/App/Chrome-bin/chrome.exe[9100:9408:0716/141934:ERROR:gpu_info_collector_win.cc(103)] Can't retrieve a valid WinSAT assessment.
[9100:9408:0716/141934:ERROR:component_loader.cc(138)] Failed to parse extension manifest.
[9100:1716:0716/141946:ERROR:get_updates_processor.cc(214)] PostClientToServerMessage() failed during GetUpdates
这是来自第二台机器的一组错误:
.../Documents/TestApp3/GoogleChromePortable/App/Chrome-bin/chrome.exe
[5220:3384:0714/142128:ERROR:component_loader.cc(138)] Failed to parse extension manifest.
[5220:7600:0714/142130:ERROR:external_registry_loader_win.cc(136)] File C:\Program Files\Coupons.com CouponBar\chrome\Coupons.com.crx for key
Software\Google\Chrome\Extensions\cnpkmcjgpcihgfnkcjapiaabbbplkcmf does not exist or is not readable.
[5220:2120:0714/142140:ERROR:get_updates_processor.cc(214)] PostClientToServerMessage() failed during GetUpdates
[5220:3384:0714/142413:ERROR:CONSOLE(122)] "Could not find value for secondaryUser", source: chrome://resources/js/load_time_data.js (122)
[5220:3384:0714/142413:ERROR:CONSOLE(122)] "[undefined] (secondaryUser) is not a boolean", source: chrome://resources/js/load_time_data.js (122)
[5220:3384:0714/142425:ERROR:CONSOLE(122)] "Could not find value for secondaryUser", source: chrome://resources/js/load_time_data.js (122)
[5220:3384:0714/142425:ERROR:CONSOLE(122)] "[undefined] (secondaryUser) is not a boolean", source: chrome://resources/js/load_time_data.js (122)
[5220:3384:0714/142442:ERROR:navigation_entry_screenshot_manager.cc(167)] Invalid entry with unique id: 12
Chrome 似乎在不同的计算机上做不同的事情,实际上并没有充当独立的浏览器......但可能通过注册表或其他一些“幕后活动”与安装在各自计算机上的浏览器进行交互沟通。也许,因为我在我的机器上安装了可移植可执行文件,我的一些本地扩展或首选项自动更新为可移植的首选项等,随后这会导致其他机器上的冲突??
我可以关闭 Chrome 的扩展程序或额外的功能,例如对更新程序的调用吗?对于这种“部署”目的,是否有更好的独立便携式浏览器可以很好地与 Shiny 配合使用?我可以解决这个问题还是这是一个失败的原因?这应该是显而易见的,但我还是要说:让非技术类型安装 R,然后 RStudio,然后确认他们的工作目录结构,然后通过脚本窗口调用 runApp() 命令,这绝对不经济...
【问题讨论】:
-
我尝试使用路径“GoogleChromePortable/GoogleChromePortable.exe”而不是更长的路径。那我就没有你提到的这样的错误。但对我来说,这两个版本甚至都不能在我的电脑上运行(RStudio 内除外)
-
我终于解决了:stackoverflow.com/a/31272180/1117932 我的主管还发现了可执行文件之间的区别:如果您更新 chrome 便携版,“GoogleChromePortable/Chrome/chrome.exe”会更新,其他可执行文件不是。
标签: windows r google-chrome portability shiny