Como acrescentar valores à variável de ambiente PATH no NodeJS?

8

Seguindo a resposta sugerida na pergunta -

É possível definir permanentemente variáveis ​​de ambiente?

Consegui definir permanentemente novas variáveis ​​de ambiente com o comando -

spawnSync('setx', ['-m', 'MyDownloads', 'H:\\temp\\downloads'])

Mas agora meu objetivo é acrescentar novos valores à variável de ambiente PATH.

É possível?

Paz
fonte
Parece uma pergunta sobre o Windows e o comando Setx, não Node, JavaScript ou Electron.
avejidah 6/01
Você está certo! Vou consertar
Paz
Você está tentando usar minha resposta?
hong4rc 11/01
Não entendi sua resposta. permissão de administrador não é o problema no meu caso.
Paz

Respostas:

1

Por que você simplesmente não obtém a variável de ambiente e depois anexa a ela?

Ou seja,

const {spawnSync} = require("child_process");
const current_value = process.env.PATH;
const new_path_value = current_value.concat(";", "/some/new/path");

var result = spawnSync('setx', ['-m', 'PATH', new_path_value])

// STDOUT
var stdOut = result.stdout.toString();
console.log(stdOut)

// STDERR
var stdErr =  result.stderr.toString();

if(stdErr === '') {
    console.log('Successfully set environment variable')
} else {
    console.log(`ERROR: ${stderr}`)
}

Atualize "/ some / new / path" e execute-o como admin, conforme sugere o link que você forneceu e deve funcionar.

marksy_91
fonte
Não funcionou para mim
Paz
Você é capaz de obter a variável de ambiente atual de process.env? O que acontece quando você consola.log (valor atual) e console.log (valor novo)?
marcasy_91 14/01
Foi ruim, sua solução estava correta! muito obrigado
Paz
2

Execute seu script com a permissão de administrador:

  • Abra o cmd ou o PowerShell com o administrador
  • Corre node your_script.js
  • Para acrescentar PATHvariável, você pode definir o valor é: %PATH%;your_new_value here( %PATH%obter o valor antigo)

Se você executar com o aplicativo elétron, precisará de permissão de administrador.

Não se esqueça de setxcorrer na janela

insira a descrição da imagem aqui

hong4rc
fonte
Qual é a diferença entre anexar a um valor antigo e definir um novo valor?
Paz
@Paz Você pode adicionar %PATH%para obter valor antigo e acrescentar seu novo valor
hong4rc 15/01
OK, agora eu entendo. Essa foi a primeira coisa que fiz com a Electron. Eu sei que o comando no Windows é setx -m '% path%; NEW_VALUE' mas não funciona com Electron
Paz
@Paz você executa com permissão de administrador?
hong4rc 15/01
claro. a permissão de administrador é necessária apenas para o "-m", o que significa que a variável será variável do sistema e não variável do usuário. essa é a parte fácil. Estou sempre acabando definindo um novo valor que substitui o antigo em vez de acrescentar um novo valor.
Paz