Как запустить некоторые команды CMD в Windows 10 с правами администратора, используя Nodejs и spawn? - PullRequest
0 голосов
/ 31 октября 2018

Я работаю с Nodejs в Windows 10. Каждый раз, когда приложение открывается, я хочу проверить, связаны ли файлы с расширением ext с моим приложением. Если нет, то мне нужно выполнить эти команды в cmd, чтобы снова установить связь:

assoc .ext=CustomExt
ftype CustomExt=app.exe %1 %*

Но для этой работы мне потребуются права администратора.

Я прочитал эту ветку , где Джефф М говорит именно то, чего я хочу достичь, но никто не отвечает ему:

С точки зрения удобства использования, идеальным было бы то, что пользователю предлагается повышенные привилегии, только когда он выполняет действие в моей программе узла, которое фактически требует этих привилегий. второй лучший вариант будет, если пользователю будет предложено повысить привилегии при первом запуске программы узла. Наименее идеальным является то, что если пользователю вообще не предлагается запрос, он всегда должен помнить о запуске программы, щелкнув правой кнопкой мыши запуск от имени администратора. Это наименее идеальный вариант, потому что на пользователя ложится бремя постоянно запускать программу нестандартным способом.

Итак, чтобы вернуться к моему первоначальному вопросу, прямо сейчас, если я попытаюсь порождать дочерний процесс, где вызываемая программа требует повышенных привилегий (пример кода в моем исходном сообщении), текущее поведение таково, что пользователь не запрашиваются эти привилегии, и вместо этого программа узла вылетает с ошибкой. Как заставить мою программу узла запросить эти привилегии вместо того, чтобы просто умереть?

Мой скрипт nodejs:

const { spawn } = require('child_process');

const assoc = spawn(                    // how to run this as admin privileges?
    'assoc',                            // command
    ['.ext=CustomExt'],                 // args
    {'shell': true }                    // options: run this into the shell
);

assoc.stdout.on('data', (buffer) => {
    var message = buffer.toString('utf8');
    console.log(message);
});

assoc.stderr.on('data', (data) => {
    console.log(`stderr: ${data}`);
});

assoc.on('close', (code) => {
    console.log(`child process exited with code ${code}`);
});

Также приветствуется любой другой способ создания ассоциации расширений в Nodejs.

...