mirror of
https://github.com/Ylianst/MeshAgent
synced 2025-12-22 19:23:31 +00:00
1. Updated default install path for Windows agent-installer
2. Fixed installer, so it doens't create an empty .db file 3. Updated uninstaller, so it deletes the folder if it's empty
This commit is contained in:
@@ -4043,6 +4043,17 @@ int MeshAgent_AgentMode(MeshAgentHostContainer *agentHost, int paramLen, char **
|
||||
#endif
|
||||
}
|
||||
|
||||
for (ri = 0; ri < paramLen; ++ri)
|
||||
{
|
||||
if (strcmp("-finstall", param[ri]) == 0 || strcmp("-funinstall", param[ri]) == 0 ||
|
||||
strcmp("-fullinstall", param[ri]) == 0 || strcmp("-fulluninstall", param[ri]) == 0 ||
|
||||
strcmp("-install", param[ri]) == 0 || strcmp("-uninstall", param[ri]) == 0)
|
||||
{
|
||||
// Create a readonly DB, because we don't need to persist anything
|
||||
agentHost->masterDb = ILibSimpleDataStore_CreateCachedOnly();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// We are a Mesh Agent
|
||||
if (agentHost->masterDb == NULL) { agentHost->masterDb = ILibSimpleDataStore_Create(MeshAgent_MakeAbsolutePath(agentHost->exePath, ".db")); }
|
||||
@@ -4066,13 +4077,11 @@ int MeshAgent_AgentMode(MeshAgentHostContainer *agentHost, int paramLen, char **
|
||||
if (strcmp("-install", param[ri]) == 0)
|
||||
{
|
||||
installFlag = 5;
|
||||
if (agentHost->masterDb == NULL && installFlag != 0) { agentHost->masterDb = ILibSimpleDataStore_CreateCachedOnly(); }
|
||||
ILibSimpleDataStore_Cached(agentHost->masterDb, "_localService", 13, "1", 1);
|
||||
}
|
||||
if (strcmp("-funinstall", param[ri]) == 0 || strcmp("-fulluninstall", param[ri]) == 0)
|
||||
{
|
||||
installFlag = 2;
|
||||
if (agentHost->masterDb == NULL && installFlag != 0) { agentHost->masterDb = ILibSimpleDataStore_CreateCachedOnly(); }
|
||||
ILibSimpleDataStore_Cached(agentHost->masterDb, "_deleteData", 11, "1", 1);
|
||||
}
|
||||
if (strcmp("-uninstall", param[ri]) == 0)
|
||||
@@ -4080,10 +4089,10 @@ int MeshAgent_AgentMode(MeshAgentHostContainer *agentHost, int paramLen, char **
|
||||
installFlag = 2;
|
||||
}
|
||||
|
||||
if (agentHost->masterDb == NULL && installFlag != 0) { agentHost->masterDb = ILibSimpleDataStore_CreateCachedOnly(); }
|
||||
if ((ix = ILibString_IndexOf(param[ri], len, "=", 1)) > 2 && strncmp(param[ri], "--", 2) == 0)
|
||||
{
|
||||
if (agentHost->masterDb != NULL) { ILibSimpleDataStore_Cached(agentHost->masterDb, param[ri] + 2, ix - 2, param[ri] + ix + 1, len - (ix + 1)); }
|
||||
if (agentHost->masterDb == NULL) { agentHost->masterDb = ILibSimpleDataStore_CreateCachedOnly(); }
|
||||
ILibSimpleDataStore_Cached(agentHost->masterDb, param[ri] + 2, ix - 2, param[ri] + ix + 1, len - (ix + 1));
|
||||
++ixr;
|
||||
}
|
||||
}
|
||||
|
||||
File diff suppressed because one or more lines are too long
@@ -29,6 +29,8 @@ function installService(params)
|
||||
startType: 'AUTO_START',
|
||||
parameters: params
|
||||
};
|
||||
if (process.platform == 'win32') { options.companyName = ''; }
|
||||
|
||||
var i;
|
||||
if ((i=params.indexOf('--_localService="1"'))>=0)
|
||||
{
|
||||
@@ -46,8 +48,14 @@ function installService(params)
|
||||
options.installInPlace = false;
|
||||
break;
|
||||
}
|
||||
if (options.parameters[i].startsWith('--companyName='))
|
||||
{
|
||||
options.companyName = options.parameters[i].split('=')[1];
|
||||
if (options.companyName.startsWith('"')) { options.companyName = options.companyName.substring(1, options.companyName.length - 1); }
|
||||
options.parameters.splice(i, 1);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
require('service-manager').manager.installService(options);
|
||||
@@ -220,17 +228,27 @@ function uninstallService2(params)
|
||||
process.stdout.write(' -> Deleting agent data...');
|
||||
if (process.platform != 'win32')
|
||||
{
|
||||
var levelUp = dataFolder.split('/');
|
||||
levelUp.pop();
|
||||
levelUp = levelUp.join('/');
|
||||
|
||||
var child = require('child_process').execFile('/bin/sh', ['sh']);
|
||||
child.stdout.on('data', function (c) { });
|
||||
child.stderr.on('data', function (c) { });
|
||||
child.stdin.write('cd ' + dataFolder + '\n');
|
||||
child.stdin.write('rm ' + appPrefix + '.*\r\n');
|
||||
child.stdin.write('rm ' + appPrefix + '.*\n');
|
||||
child.stdin.write('cd /\n');
|
||||
child.stdin.write('rmdir ' + dataFolder + '\n');
|
||||
child.stdin.write('rmdir ' + levelUp + '\n');
|
||||
child.stdin.write('exit\n');
|
||||
child.waitExit();
|
||||
child.waitExit();
|
||||
}
|
||||
else
|
||||
{
|
||||
var child = require('child_process').execFile(process.env['windir'] + '\\system32\\cmd.exe', ['/C del "' + dataFolder + '\\' + appPrefix + '.*"']);
|
||||
var levelUp = dataFolder.split('\\');
|
||||
levelUp.pop();
|
||||
levelUp = levelUp.join('\\');
|
||||
var child = require('child_process').execFile(process.env['windir'] + '\\system32\\cmd.exe', ['/C del "' + dataFolder + '\\' + appPrefix + '.*" && rmdir "' + dataFolder + '" && rmdir "' + levelUp + '"']);
|
||||
child.stdout.on('data', function (c) { });
|
||||
child.stderr.on('data', function (c) { });
|
||||
child.waitExit();
|
||||
|
||||
@@ -54,7 +54,7 @@ function extractFileSource(filePath)
|
||||
return (typeof (filePath) == 'string' ? filePath : filePath.source);
|
||||
}
|
||||
|
||||
function perpareFolders(folderPath)
|
||||
function prepareFolders(folderPath)
|
||||
{
|
||||
var dlmtr = process.platform == 'win32' ? '\\' : '/';
|
||||
|
||||
@@ -570,7 +570,6 @@ function serviceManager()
|
||||
// 32 bit Windows
|
||||
return process.env['ProgramFiles'];
|
||||
};
|
||||
this.getServiceFolder = function getServiceFolder() { return this.getProgramFolder() + '\\mesh'; };
|
||||
|
||||
this.enumerateService = function () {
|
||||
var machineName = this.GM.CreatePointer();
|
||||
@@ -1577,9 +1576,25 @@ function serviceManager()
|
||||
if (!this.isAdmin()) { throw ('Installing as Service, requires admin'); }
|
||||
|
||||
// Before we start, we need to copy the binary to the right place
|
||||
var folder = options.installPath == null ? this.getServiceFolder() : options.installPath;
|
||||
var folder;
|
||||
if(!options.installPath)
|
||||
{
|
||||
options.installPath = this.getProgramFolder();
|
||||
switch(options.companyName)
|
||||
{
|
||||
case null:
|
||||
options.installPath += '\\mesh';
|
||||
break;
|
||||
case '':
|
||||
break;
|
||||
default:
|
||||
options.installPath += ('\\' + options.companyName);
|
||||
break;
|
||||
}
|
||||
}
|
||||
folder = options.installPath;
|
||||
if (folder.endsWith('\\')) { folder = folder.substring(0, folder.length - 1); }
|
||||
if (!options.installInPlace) { perpareFolders(folder + '\\' + options.name); }
|
||||
if (!options.installInPlace) { prepareFolders(folder + '\\' + options.name); }
|
||||
if (options.servicePath == process.execPath) { options._isMeshAgent = true; }
|
||||
|
||||
if (!options.installInPlace)
|
||||
|
||||
Reference in New Issue
Block a user