102 lines
3.6 KiB
JavaScript
Raw Normal View History

2025-01-12 00:52:51 +08:00
// 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);