102 lines
3.6 KiB
JavaScript
102 lines
3.6 KiB
JavaScript
|
// JSON object provided by json2.js since WSH JScript interpreter doesn't have/expose it
|
||
|
// https://github.com/douglascrockford/JSON-js/blob/master/json2.js
|
||
|
//
|
||
|
// JSON.minify provided by https://github.com/getify/JSON.minify
|
||
|
// to strip out comments from JSON so that it can be parsed without error.
|
||
|
//
|
||
|
// This script and dependencies are is loaded into the interpreter using a .wsf file:
|
||
|
// http://stackoverflow.com/questions/14319592/jscript-dynamically-load-javascript-libraries
|
||
|
|
||
|
//' Instantiate required objects
|
||
|
var oFSO = WScript.CreateObject("Scripting.FileSystemObject");
|
||
|
var oShell = WScript.CreateObject("WScript.Shell");
|
||
|
|
||
|
// Load Configuration File
|
||
|
var fConfig = oFSO.OpenTextFile('utils\\config.cfg', 1); // 1 = for reading
|
||
|
var sConfig = (fConfig.AtEndOfStream) ? "" : fConfig.ReadAll();
|
||
|
if (this.JSON) {
|
||
|
var oConfig = (sConfig !== "") ? JSON.parse(JSON.minify(sConfig)) : undefined;
|
||
|
} else {
|
||
|
oShell.Popup('Error: JSON object not found, cannot process configuration');
|
||
|
WScript.Quit(1);
|
||
|
}
|
||
|
|
||
|
// Load Registry Paths
|
||
|
var fRegPaths = oFSO.OpenTextFile('utils\\regpaths.json', 1); // 1 = for reading
|
||
|
var sRegPaths = (fRegPaths.AtEndOfStream) ? "" : fRegPaths.ReadAll();
|
||
|
if (this.JSON) {
|
||
|
var oRegPaths = (sRegPaths !== "") ? JSON.parse(JSON.minify(sRegPaths)) : undefined;
|
||
|
} else {
|
||
|
oShell.Popup('Error: JSON object not found, cannot process registry paths');
|
||
|
WScript.Quit(1);
|
||
|
}
|
||
|
|
||
|
// Determine where to keep the error log
|
||
|
// If deployed to users individually, keep with the deployment (default)
|
||
|
// If deployed to a central location (e.g. a network share) use a directory in
|
||
|
// each user's %userprofile%
|
||
|
sLogPath = 'log';
|
||
|
if (oConfig.logging.use_userprofile) {
|
||
|
//' Determine User Home directory
|
||
|
var sUPath = oShell.ExpandEnvironmentStrings("%USERPROFILE%");
|
||
|
var sLogPath = sUPath + "\\." + oConfig.appname;
|
||
|
}
|
||
|
|
||
|
//' Create an application log directory as needed
|
||
|
if (!oFSO.FolderExists(sLogPath)) {
|
||
|
oFSO.CreateFolder(sLogPath);
|
||
|
}
|
||
|
|
||
|
sLogFile = 'error.log';
|
||
|
if (oConfig.logging.error_log) {
|
||
|
sLogFile = oConfig.logging.error_log;
|
||
|
}
|
||
|
|
||
|
//' Define the R interpreter
|
||
|
var Rbindir = "";
|
||
|
if (oRegPaths.r) {
|
||
|
var Rbindir = oRegPaths.r;
|
||
|
}
|
||
|
|
||
|
//' Rscript.exe is much more efficient than R.exe CMD BATCH
|
||
|
var Rexe = Rbindir + "\\bin\\Rscript.exe";
|
||
|
var Ropts = "--vanilla";
|
||
|
|
||
|
//' --vanilla implies the following flags:
|
||
|
//' --no-save --no-environ --no-site-file --no-restore --no-Rconsole --no-init-file
|
||
|
|
||
|
if (!oFSO.FileExists(Rexe)) {
|
||
|
oShell.Popup('Error: R executable not found:\n' + Rexe);
|
||
|
WScript.Quit(1);
|
||
|
}
|
||
|
|
||
|
var RScriptFile = "utils\\package_manager.R";
|
||
|
if (!oFSO.FileExists(RScriptFile)) {
|
||
|
oShell.Popup('Error: package_manager.R not found:\n' + RScriptFile);
|
||
|
WScript.Quit(1);
|
||
|
}
|
||
|
|
||
|
var Outfile = sLogPath + "\\" + sLogFile;
|
||
|
|
||
|
var strCommand = ['"' + Rexe + '"', Ropts, RScriptFile, "1>", Outfile, "2>&1"].join(" ");
|
||
|
var intWindowStyle = 0;
|
||
|
/*
|
||
|
' other values:
|
||
|
' 0 Hide the window and activate another window.
|
||
|
' 1 Activate and display the window. (restore size and position) Specify this flag when displaying a window for the first time.
|
||
|
' 2 Activate & minimize.
|
||
|
' 3 Activate & maximize.
|
||
|
' 4 Restore. The active window remains active.
|
||
|
' 5 Activate & Restore.
|
||
|
' 6 Minimize & activate the next top-level window in the Z order.
|
||
|
' 7 Minimize. The active window remains active.
|
||
|
' 8 Display the window in its current state. The active window remains active.
|
||
|
' 9 Restore & Activate. Specify this flag when restoring a minimized window.
|
||
|
' 10 Sets the show-state based on the state of the program that started the application.
|
||
|
*/
|
||
|
|
||
|
//' continue running script after launching R
|
||
|
var bWaitOnReturn = false;
|
||
|
|
||
|
oShell.Run(strCommand, intWindowStyle, bWaitOnReturn);
|