From 3c576d73a7005e272384bb337c10571bc3d6fd09 Mon Sep 17 00:00:00 2001 From: Sergio Padrino Date: Fri, 1 Mar 2024 16:46:53 +0100 Subject: [PATCH 1/3] Add support for REG_EXPAND_SZ --- lib/registry.ts | 1 + src/main.cc | 5 +++-- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/lib/registry.ts b/lib/registry.ts index a4aa677..ce3d57c 100644 --- a/lib/registry.ts +++ b/lib/registry.ts @@ -173,6 +173,7 @@ export function setValue( if ( valueType != RegistryValueType.REG_SZ && + valueType != RegistryValueType.REG_EXPAND_SZ && valueType != RegistryValueType.REG_DWORD ) { // not implemented yet diff --git a/src/main.cc b/src/main.cc index 824ce14..6f766f3 100644 --- a/src/main.cc +++ b/src/main.cc @@ -426,7 +426,7 @@ Napi::Value SetValue(const Napi::CallbackInfo& info) { long setValue = ERROR_INVALID_HANDLE; - if (wcscmp(valueType, L"REG_SZ") == 0) + if (wcscmp(valueType, L"REG_SZ") == 0 || wcscmp(valueType, L"REG_EXPAND_SZ") == 0) { std::string typeArg = info[4].As(); auto valueData = utf8ToWideChar(typeArg); @@ -436,11 +436,12 @@ Napi::Value SetValue(const Napi::CallbackInfo& info) return env.Undefined(); } int datalength = static_cast(wcslen(valueData) * sizeof(valueData[0])); + DWORD regType = wcscmp(valueType, L"REG_SZ") == 0 ? REG_SZ : REG_EXPAND_SZ; setValue = RegSetValueEx( hOpenKey, valueName, 0, - REG_SZ, + regType, (const BYTE *)valueData, datalength); } From c8ceab3bba575eb3668d103a7d7fdeabf88c7982 Mon Sep 17 00:00:00 2001 From: Sergio Padrino Date: Fri, 1 Mar 2024 17:30:00 +0100 Subject: [PATCH 2/3] Add test for REG_EXPAND_SZ type --- test/registry-test.ts | 29 ++++++++++++++++++++++++++++- 1 file changed, 28 insertions(+), 1 deletion(-) diff --git a/test/registry-test.ts b/test/registry-test.ts index 2f2c614..3fef7e4 100644 --- a/test/registry-test.ts +++ b/test/registry-test.ts @@ -75,7 +75,7 @@ if (process.platform === 'win32') { HKEY.HKEY_CURRENT_USER, 'SOFTWARE\\Microsoft\\Windows\\CurrentVersion', 'ValueTest', - RegistryValueType.REG_EXPAND_SZ, + RegistryValueType.REG_MULTI_SZ, 'Value' ) expect(result).toBeFalsy() @@ -130,6 +130,33 @@ if (process.platform === 'win32') { expect(programFilesDir!.type).toBe('REG_SZ') expect(programFilesDir!.data).toBe('Value 123 ! test@test.com (456)') }) + + it('can set REG_EXPAND_SZ value for a registry key', () => { + let result = false + try { + result = setValue( + HKEY.HKEY_CURRENT_USER, + 'SOFTWARE\\Microsoft\\Windows\\CurrentVersion', + 'ValueTestExpandSz', + RegistryValueType.REG_EXPAND_SZ, + 'Value 123 ! test@test.com (456);%NVM_HOME%;%NVM_SYMLINK%' + ) + } catch (e) { + console.log(e) + } + expect(result).toBeTruthy() + + const values = enumerateValues( + HKEY.HKEY_CURRENT_USER, + 'SOFTWARE\\Microsoft\\Windows\\CurrentVersion' + ) + + const value = values.find(v => v.name == 'ValueTestExpandSz') + expect(value!.type).toBe('REG_EXPAND_SZ') + expect(value!.data).toBe( + 'Value 123 ! test@test.com (456);%NVM_HOME%;%NVM_SYMLINK%' + ) + }) }) describe('createKey', () => { From 5cafceed3aa0c0e65a890fd43b7d6659be5eae75 Mon Sep 17 00:00:00 2001 From: Sergio Padrino Date: Fri, 1 Mar 2024 17:32:57 +0100 Subject: [PATCH 3/3] 1.16.0 --- package-lock.json | 2 +- package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/package-lock.json b/package-lock.json index 3c69276..8e3cc3b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "registry-js", - "version": "1.15.1", + "version": "1.16.0", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index c832583..a80adb1 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "registry-js", - "version": "1.15.1", + "version": "1.16.0", "description": "A simple and opinionated library for working with the Windows registry", "main": "dist/lib/index.js", "typings": "dist/lib/index.d.ts",