copyFileSync не копирует файл и не выдает ошибку - PullRequest
0 голосов
/ 01 июля 2019

Я запускаю функцию, которую я написал на JavaScript внутри клиента nodejs / Electron.

Эта функция предназначена для копирования файла с флэш-диска пользователя на его c:/Windows/System32 (файлкопируется туда, чтобы его можно было запустить из командной строки вручную при следующем прикосновении к компьютеру без необходимости переключать каталоги)

Проблема в том, что файлы не копируются, и copyFileSync не выдает ошибку.

Вот код, с которым у меня возникла конкретная проблема:

try {
    console.log('copying t.bat');
    fs.copyFileSync(remote.app.getAppPath() + '\\app\\files\\scripts\\files\\t.bat', 'C:\\Windows\\System32\\t.bat');
} catch(err) {

    console.log('could not copy t.bat', err);

    $('#mfail_title').text('Could not copy t.bat file');
    $('#mfail_data').text(err);

    UIkit.modal("#master_fail").show();

    return false;
}

Как видите, у меня copyFileSync внутри блока TRY CATCH.Я знаю, что этот код работает, потому что в консоли я получаю copying t.bat, но больше ничего.

Как я могу получить мои файлы для копирования или, по крайней мере, выдать ошибку, когда это невозможно?

Этот клиент работает в режиме OOBE на разных компьютерах с Windows 10, поэтому всегда имеет доступ администратора.


Я пытался обновить асинхронную версию copyFile, но у меня возникла та же проблема.Вот мой код

var source = remote.app.getAppPath() + '\\app\\files\\scripts\\files\\t.bat';
var destination = 'C:\\Windows\\System32\\t.bat';

fs.copyFile(source, destination, (err) => {
    if (err) {
        console.log(err);
    } else {

        source = remote.app.getAppPath() + '\\app\\files\\scripts\\files\\p.bat';
        destination = 'C:\\Windows\\System32\\p.bat';

        fs.copyFile(source, destination, (err) => {
            if (err) {
                console.log(err);
            } else {

                source = remote.app.getAppPath() + '\\app\\files\\scripts\\files\\p.bat';
                destination = 'C:\\Windows\\System32\\p.bat';

                child = spawn("powershell.exe",['-ExecutionPolicy', 'ByPass', '-File', remote.app.getAppPath() + '\\app\\files\\scripts\\' + type + '.ps1']);

            }
        });

    }
});

Это должно скопировать файл, затем, когда он будет завершен, он должен скопировать другой файл, после завершения он должен запустить скрипт powershell.

Каждый экземпляр copyFile проверяетдля ошибки, прежде чем двигаться дальше, но она никогда не выдает ошибку, и файл никогда не копируется.

Ответы [ 2 ]

0 голосов
/ 02 июля 2019

Похоже, вы используете fs для процесса рендеринга (на стороне клиента), который не будет работать (при условии, что ваш fs является модулем node.js fs и (*)).Ваш первый скрипт, похоже, использует jQuery (подсказки для рендерера), а второй использует remote в первой строке.

fs можно использовать только (*) в основном процессе, и вам нужно будет создать IRCканал и сделать что-то вроде:

ircRenderer.sendSync('copy-file-sync', {from: '/from/path', to: '/to/path'})

и, конечно же, реализовать обработчик для этого быстро изобретенного канала 'copy-file' в главном процессе.

(*) Редактировать: Iс nodeIntegration = true много не играл, поэтому fs может работать или не работать в процессе рендеринга с этим флагом, установленным в BrowserWindow.Но обмен сообщениями по irc определенно должен работать, и если нет, то проблема связана с внешним электроном, вероятно, связанным с правами доступа к файлам.

0 голосов
/ 02 июля 2019

Ранее у меня была похожая проблема, в которой Антивирус (Comodo) не разрешал электронному приложению доступ к жесткому диску.

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

Пожалуйста, проверьте, что это не так с вами.

Вы можете получить доступ к 'fs' в консоли изЭлектрон и проверить другие вещи в файловой системе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...