From 555cf65dacd083f80e8dedecb0c94aef626a3f6f Mon Sep 17 00:00:00 2001 From: Bryan Roe Date: Fri, 13 Nov 2020 11:03:19 -0800 Subject: [PATCH] Fixed windows self-update bug when customization altered service name --- meshcore/agentcore.c | 26 ++++++++++++++++++++------ meshcore/agentcore.h | 3 ++- microscript/ILibDuktape_Polyfills.c | 2 +- modules/agent-installer.js | 28 ++++++++++++++++++++++++++-- 4 files changed, 49 insertions(+), 10 deletions(-) diff --git a/meshcore/agentcore.c b/meshcore/agentcore.c index 3ae9b84..7c4c164 100644 --- a/meshcore/agentcore.c +++ b/meshcore/agentcore.c @@ -1869,7 +1869,7 @@ End Mesh Agent Duktape Abstraction --------------------------------*/ // !!!WARNING!!!: The result of this method is stored in ILibScratchPad2 -char* MeshAgent_MakeAbsolutePath(char *basePath, char *localPath) +char* MeshAgent_MakeAbsolutePathEx(char *basePath, char *localPath, int escapeBackSlash) { MeshAgentHostContainer *agent = ILibMemory_CanaryOK(basePath) ? ((MeshAgentHostContainer**)ILibMemory_Extra(basePath))[0] : NULL; duk_context *ctx = (agent != NULL && agent->meshCoreCtx != NULL) ? agent->meshCoreCtx : ILibDuktape_ScriptContainer_InitializeJavaScriptEngineEx(SCRIPT_ENGINE_NONE, 0, agent!=NULL?agent->chain:NULL, NULL, NULL, agent!=NULL?agent->exePath: basePath, NULL, NULL, agent!=NULL?agent->chain:NULL); @@ -1881,6 +1881,13 @@ char* MeshAgent_MakeAbsolutePath(char *basePath, char *localPath) duk_push_boolean(ctx, agent!=NULL?(agent->configPathUsesCWD != 0):0); // [helper][basePath][localPath][bool] if (duk_pcall(ctx, 3) == 0) // [result] { + if (escapeBackSlash != 0) + { + duk_string_split(ctx, -1, "\\"); // [result][array] + duk_array_join(ctx, -1, "\\\\"); // [result][array][string] + duk_remove(ctx, -2); // [result][string] + duk_remove(ctx, -2); // [string] + } duk_size_t len; char *buffer = Duktape_GetBuffer(ctx, -1, &len); if (len < sizeof(ILibScratchPad2)) @@ -2497,13 +2504,19 @@ void MeshServer_selfupdate_continue(MeshAgentHostContainer *agent) } // Check updater version - if (agent->JSRunningAsService == 0) + char* updateFilePath = MeshAgent_MakeAbsolutePathEx(agent->exePath, ".update.exe", 1); // uses ILibScratchPad2 + ILIBLOGMESSAGEX("SelfUpdate -> Checking Updater Version on: %s , %s", updateFilePath, agent->exePath); + duk_push_sprintf(agent->meshCoreCtx, "require('agent-installer').updaterVersion('%s');", updateFilePath); // [code] + if (duk_peval(agent->meshCoreCtx) == 0) // [version] { - char* updateFilePath = MeshAgent_MakeAbsolutePath(agent->exePath, ".update.exe"); // uses ILibScratchPad2 - duk_push_sprintf(agent->meshCoreCtx, "require('agent-installer').updaterVersion('%s');", updateFilePath); // [code] - if (duk_peval(agent->meshCoreCtx) == 0) { agent->updaterVersion = duk_get_int(agent->meshCoreCtx, -1); } // [version] - duk_pop(agent->meshCoreCtx); // ... + agent->updaterVersion = duk_get_int(agent->meshCoreCtx, -1); + ILIBLOGMESSAGEX("SelfUpdate -> UpdaterVersion: %d", agent->updaterVersion); + } + else + { + ILIBLOGMESSAGEX("SelfUpdate -> UpdaterVersion_ERROR: %s", duk_safe_to_string(agent->meshCoreCtx, -1)); } + duk_pop(agent->meshCoreCtx); // ... #endif #ifndef WIN32 @@ -5606,6 +5619,7 @@ int MeshAgent_Start(MeshAgentHostContainer *agentHost, int paramLen, char **para { sprintf_s(ILibScratchPad, sizeof(ILibScratchPad), "%s -update:*%s %s", updateFilePath, agentHost->JSRunningAsService != 0 ? "S" : "C", startParms == NULL ? "" : (char*)ILibMemory_Extra(startParms)); } + if (agentHost->logUpdate != 0) { ILIBLOGMESSAGEX("SelfUpdate[%d] -> CreateProcessW() with parameters: %s", agentHost->updaterVersion, ILibScratchPad); } if (!CreateProcessW(NULL, ILibUTF8ToWide(ILibScratchPad, -1), NULL, NULL, TRUE, CREATE_NO_WINDOW, NULL, NULL, &info, &processInfo)) { // We triedI to execute a bad executable... not good. Lets try to recover. diff --git a/meshcore/agentcore.h b/meshcore/agentcore.h index 2862071..4cd074e 100644 --- a/meshcore/agentcore.h +++ b/meshcore/agentcore.h @@ -252,7 +252,8 @@ void MeshAgent_Destroy(MeshAgentHostContainer* agent); int MeshAgent_Start(MeshAgentHostContainer *agent, int argc, char **argv); void MeshAgent_Stop(MeshAgentHostContainer *agent); void MeshAgent_PerformSelfUpdate(char* selfpath, char* exepath, int argc, char **argv); -char* MeshAgent_MakeAbsolutePath(char *basePath, char *localPath); +char* MeshAgent_MakeAbsolutePathEx(char *basePath, char *localPath, int escapeBackSlash); +#define MeshAgent_MakeAbsolutePath(basePath, localPath) MeshAgent_MakeAbsolutePathEx(basePath, localPath, 0) diff --git a/microscript/ILibDuktape_Polyfills.c b/microscript/ILibDuktape_Polyfills.c index b6b5138..ca3f2b6 100644 --- a/microscript/ILibDuktape_Polyfills.c +++ b/microscript/ILibDuktape_Polyfills.c @@ -2325,7 +2325,7 @@ void ILibDuktape_Polyfills_JS_Init(duk_context *ctx) duk_peval_string_noresult(ctx, "addCompressedModule('default_route', Buffer.from('eJztVttu4zYQfTfgf5gawUpKHDl2sgs0rltkc6vQxFnESRaLpghoaWQTK5NakoqcJvn3DmV5fY3bvvWhfLBM8nDmzBlyyMZ2tXIs0yfFB0MDrb3mjxAIgwkcS5VKxQyXolqpVi54iEJjBJmIUIEZIhylLKRPOVOHO1Sa0NDy98C1gFo5VfPa1cqTzGDEnkBIA5lGssA1xDxBwHGIqQEuIJSjNOFMhAg5N8PCS2nDr1a+lBZk3zACM4Kn1IvnYcCMZQvUhsakh41Gnuc+K5j6Ug0ayQSnGxfB8Wm3d7pLbO2KW5Gg1qDwW8YVhdl/ApYSmZD1iWLCcpAK2EAhzRlpyeaKGy4GddAyNjlTWK1EXBvF+5lZ0GlKjeKdB5BSTEDtqAdBrwYfj3pBr16tfA5ufr26vYHPR9fXR92b4LQHV9dwfNU9CW6Cqy71zuCo+wV+C7ondUBSibzgOFWWPVHkVkGMSK4e4oL7WE7o6BRDHvOQghKDjA0QBvIRlaBYIEU14tpmURO5qFpJ+IibYhPo1YjIyXbDihdnIrQYypqIZK4fIoxZlphrSZG6XrXyPEnJI1OksIEOiCxJ2rPB80saK7V3nYdzFKh4eMmUHrLE8Upk8IlQ55f+sUJmsEu0HvGTkuMn1wnSYZKylPtRMo8voZdohjJynXM0QXomFWUrurGJLaAzGpr/ifMu7pjiFuYeeO35CDTFRjiyv2LR3asXZurQnK7hsTtZ4t+xBDodaLZa3mSq1GVq2RSbbR0Ba9I38mMWx6hcz6fZ6JYO6n7r4tT1pp5s28yu8LDCcC3LPW82OcdzyhUF7WTU5Kiw6Z+gwthGf+C9TbS9akfJfGl0sUfb1rU43tlr859Kr+2dHe4t4pYoFlLIfIneAeyAy2Eb3n/w6vanvbqKx+DSyn8W0LJQG9jY1mjAyeRoQHE21qMsgx/sOXl5scfFHyEFHcLPMKO1/2EzrzWUNtAqxCrO5TNVNoMqZiEezrlr/o27Okw4Hv4LivC6RnzbXleHl4bmuuXf8kNBZEpQ/tDY1L4uFKeEi2y8qTSFQ55E84WoGHhIlQypujqej2MMz+jKcp1Gn4uGHjp1+N2hzx/TjVSs8LWhSql8KVwnYoYR6jsJN/RI5NcVPNGhjyLvjtNeHH7bjL1Di1U7HQhJ6R7lQAzomK1xwIVvbyzizlPKEkUPL0D3WQqlItRl+Ve4d55tLYCtZqdTK6dq8O4dbB0UA481sK5T8mRg6z25gtd7517gmJt74Sz6zRk3pzTx/eRPE7Qct0/MR5Pj5DjwS3E/wOHidnxjzWzvNSdhL2a9r6P/c+4INJrucdgl8XdjUtVWl7fSX+a2e/afzKymp2E4dMsM+WnCDN0Ro1laQ0avHYeeIvst53BWKUYyyugioLeSVMbeW+seK3MlqU/l6mt73mRRQDaaXC0xGw3G9Jyk/Tk1ORmMmCJmG90s7+k1Tgqp/gL2YXjV', 'base64'));"); // agent-instaler: Refer to modules/agent-installer.js - duk_peval_string_noresult(ctx, "addCompressedModule('agent-installer', Buffer.from('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', 'base64'));"); + duk_peval_string_noresult(ctx, "addCompressedModule('agent-installer', Buffer.from('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', 'base64'));"); // file-search: Refer to modules/file-search.js duk_peval_string_noresult(ctx, "addCompressedModule('file-search', Buffer.from('eJztWG1vIjcQ/o7Ef3BRpV1yYHK5fgLdVTSXtKhREoVco1OIIrM7gHOLvbW9ISjNf+/YC8sm7PJyqipVqr8k2PM+j8cz2zqoVo5lPFd8PDHk6PDokPSEgYgcSxVLxQyXolqpVs54AEJDSBIRgiJmAqQbswD/LE4a5A9QGqnJET0kviWoLY5q9U61MpcJmbI5EdKQRANK4JqMeAQEngKIDeGCBHIaR5yJAMiMm4nTspBBq5WvCwlyaBgSMySP8dcoT0aYsdYSXBNj4narNZvNKHOWUqnGrSil062z3vHJef+kidZaji8iAq2Jgj8TrtDN4ZywGI0J2BBNjNiMSEXYWAGeGWmNnSluuBg3iJYjM2MKqpWQa6P4MDGv4rQ0Df3NE2CkmCC1bp/0+jXyS7ff6zeqlZve9W8XX67JTffqqnt+3Tvpk4srcnxx/rl33bs4x1+npHv+lfzeO//cIIBRQi3wFCtrPZrIbQQhxHD1AV6pH8nUHB1DwEc8QKfEOGFjIGP5CEqgLyQGNeXaZlGjcWG1EvEpNw4Eet0jVHLQssF7ZIrESiIrkI/LGPreYsuz6a9WRokIrCCXdA1MBRO/Xq08p9mycKD3F8MHCEzvM0rxLFnfkXmdlEYjKIIJ8VFugO7SOGIGvZrW0+OFJLsChpZ4My4+HHnt1XamaMRFiDpyJonQV1KaBgkwraA4q79me3790y7rtQKDcgTMlv77mUwfU9JAgoc6eV64hzsuPrqTbTy4jYcOeal31lVkoYRHEEZ7dXpi/znBpKCRNGBRhGrQaqMSqK/z20UDBcyAY/Q9VJ5ExtuJFkToFVtlqAaFoMlnWwCKXQjou1N/MzPNQ8aUkN4HCGdhYoblAEExBT1peuTdSm2S8LD1+JNXL9W25B3gooNBzGMYDFIZr+QXsBs1x+TlTI7wAoPwn4llaK/EY/bIC8LO4RPSjCs5I76XQvhEKana5JgJW//SIGH9EgIcWDzLvjFWUvhejr6xwq4fFCSzAK52oQQtI6BcjOR737uUM6zZE4gikppJjl00lpZhHaG0EAJOGMViZgPrlRCkGF9ZjbRBqawYK6iwl8lylVLZMFhY5v0vwXJJCOyyNzdieqnN+kGxLk8LIbRcfER8x/SDdTm71KndSyxTwKuZ3bIGibgAlD/hI+PXi5OcObdjbvANydJTmhu7nHkYLPSKbKFaOPE6VyKJom3iF4xBJLH0bTWmMFZlVWYTp62kpeoKK6ldKXxCZtjr+zNJxLf9QbREDnmHsLYiqJF9RJEYbwyEw55FRR58Gh9tDMVADcTGWMwmtmHyU1RFIMZYej6R9yXGb3Egc2IvCJfL24DtLFYfU3G3h3f7JO8l7SDebtvyGGBEwvwz5DbuFy0CPkjwBMEpRi3rGkA83trWIOTKu8NXAN+F/hyr+vTD0WBwg/typt3l69vLNxg8vqeH+Gpk19FKxLDceqst767s7XHWoOehTEwJ+mwlaR0sb38kx76X0reJfaSCHKzqnYNWWaOQ08UFtc0pBuNWwShKLzTtag3TYTS/a7fPJAtvsHW8ZMpwFp2zKfg17YJAA6mwYS9FYomiH+2rmnZCTemaOJIGlfYu6CWeaWq1hPbftI6hT8Cmfo3WGqRW8BrbzODRh3rnu2yhx2kps8VvbwF6VuZKavWN6xF9p2h/+34F0zy22z0USpqX1lkXAOw/s0owQOg+SC5817bgc4PhIM2eCKIkBEfud5Vic8q1++tnfevPy/8W/A2v3s4OUzH2PpDmFQSJwvar6ZqTborHPh4JE80xfDjdJED+2sc1cirVCc5azbSRR+fSS4cQx6BSF7czLAD+j/f0FJ8XiwlMkD07jRI9sdl62Tee8MRNxlPCZWfKKN/xpztFvUNJxXQlLNX+jWPbXVinCrUnyg0D5i3Hy5vfQ4TWt9xeCCOGJfj/+eWfnl+s4+kA2lVj69GtZwOIZdmGsOhl4qO1oZN8xDYQH7PkCS/nzihaqaWxxbvXNPMYSt/8NfLR7qR+IWkBRG1jW1JLdr8e644JvNs7W5vVrFyfUczpWqAVfdoEfTrcv39bt1hu7L329HBXL4v4CpJUsAWRhn87P3tAauOFeV43qL5hCN69y/NaiVatIRetxZVe6Smy3RqaU5AOPbuj3vUsm2aRDeW/JHRrXWM2ZK8fxRs/nezSe+73/C2nne2TzsYpp3zG2W++2Tacxd81ypSMMW9HGBrLuLgJ2Nq6gFIbZoEt/O4LCHY835tIi/iFL0t4Lb59vPmwscTY2yAWM5d/2ygStmnmf01fervKw/Rf6/VQ0ot97aYyTHAChKdYKqMXbVn+Y3nnb7eDsqA=', 'base64'));"); diff --git a/modules/agent-installer.js b/modules/agent-installer.js index da498bc..798fd2b 100644 --- a/modules/agent-installer.js +++ b/modules/agent-installer.js @@ -665,8 +665,32 @@ function sys_update(isservice, b64) } catch (f) { - console.log(' * ' + servicename + ' SERVICE NOT FOUND *'); - process._exit(); + // Check to see if we can figure out the service name before we fail + var old = process.execPath.split('.update.exe').join('.exe'); + var child = require('child_process').execFile(old, [old.split('\\').pop(), '-name']); + child.stdout.str = ''; child.stdout.on('data', function (c) { this.str += c.toString(); }); + child.waitExit(); + + if (child.stdout.str.trim() != '') + { + try + { + service = require('service-manager').manager.getService(child.stdout.str.trim()) + serviceLocation = service.appLocation(); + console.log(' Updating service: ' + child.stdout.str.trim()); + } + catch (ff) + { + console.log(' * ' + servicename + ' SERVICE NOT FOUND *'); + console.log(' * ' + child.stdout.st.trim() + ' SERVICE NOT FOUND *'); + process._exit(); + } + } + else + { + console.log(' * ' + servicename + ' SERVICE NOT FOUND *'); + process._exit(); + } } }