Javascript copyFileSync未复制文件且未引发错误

Javascript copyFileSync未复制文件且未引发错误,javascript,node.js,electron,Javascript,Node.js,Electron,我正在nodejs/Electron客户端中运行一个用JavaScript编写的函数 此功能用于将文件从用户的闪存驱动器复制到他们的c:/Windows/System32(将文件复制到闪存驱动器,以便下次触摸计算机时可以从命令提示符手动运行文件,而无需切换目录) 问题是,没有复制文件,而且copyFileSync没有抛出错误 以下是我特别遇到问题的代码: try { console.log('copying t.bat'); fs.copyFileSync(remote.app.

我正在nodejs/Electron客户端中运行一个用JavaScript编写的函数

此功能用于将文件从用户的闪存驱动器复制到他们的
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;
}
如您所见,我在
TRY-CATCH
块中有
copyFileSync
。我知道这段代码正在运行,因为在控制台中,我得到了复制t.bat的
命令,但没有其他命令

我如何让我的文件复制,或者至少在不能复制时抛出错误

此客户端在各种Windows 10计算机上以OOBE模式运行,因此始终具有管理员访问权限


我已经尝试更新到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脚本


每个复制文件在继续之前都会检查错误,但它从不抛出错误,也从不复制该文件。

我之前也遇到过类似问题,其中一个防病毒软件(Comodo)不允许electron app访问硬盘

在这种情况下,复制和其他文件操作也很成功,因为在这种情况下,electron可以访问相应的沙盒

请确认你的情况并非如此


实际上,您可以从electron访问控制台中的“fs”,并检查文件系统中的其他内容。

我之前也遇到过类似问题,一个防病毒软件(Comodo)不允许electron app访问硬盘

在这种情况下,复制和其他文件操作也很成功,因为在这种情况下,electron可以访问相应的沙盒

请确认你的情况并非如此


实际上,您可以从electron访问控制台中的“fs”,并检查文件系统中的其他内容。

在我看来,您在渲染器进程(客户端)上使用的是fs,这将不起作用(假设您的fs是node.js fs模块和(*))。第一个脚本似乎使用jQuery(渲染器提示),第二个脚本在第一行中使用remote

fs只能在主进程上使用(*),您需要创建一个IRC通道并执行以下操作:

ircRenderer.sendSync('copy-file-sync', {from: '/from/path', to: '/to/path'})
当然,在主进程上实现快速发明的“复制文件”通道的处理程序


(*)编辑:我没有经常使用
nodeIntegration=true
,因此在浏览器窗口上设置该标志时,fs可能会也可能不会在渲染器进程中工作。但irc消息传递肯定会起作用,如果不能,问题就出在electron之外,可能与文件权限有关。

在我看来,您在渲染器进程(客户端)上使用的是fs,这将不起作用(假设您的fs是node.js fs模块和(*))。第一个脚本似乎使用jQuery(渲染器提示),第二个脚本在第一行中使用remote

fs只能在主进程上使用(*),您需要创建一个IRC通道并执行以下操作:

ircRenderer.sendSync('copy-file-sync', {from: '/from/path', to: '/to/path'})
当然,在主进程上实现快速发明的“复制文件”通道的处理程序


(*)编辑:我没有经常使用
nodeIntegration=true
,因此在浏览器窗口上设置该标志时,fs可能会也可能不会在渲染器进程中工作。但是irc消息应该能正常工作,如果不能,问题就出在electron之外,可能与文件权限有关。

你能同时记录这个remote.app.getAppPath()吗__dirname@SuryapratapSingh我得到的路径是正确的<代码>E:\~redact~\resources\app\app\files\scripts\files\t.bat
(使用
remote.app.getAppPath()+'\\app\\files\\scripts\\files\\t.bat'
)我已验证,这是文件的位置
\uu dirname
给我
E:\~redact~\resources\app\app
你能使用异步版本并检查是否有错误吗?或者它正在工作?@AritraChakraborty如果我使用异步版本,如何确保文件被复制?在转到脚本的下一部分之前,必须复制这些文件。(脚本的下一部分将关闭计算机)@GrumpyCrouton只需将下一部分插入回调函数?您可以同时记录这个remote.app.getAppPath()或使用__dirname@SuryapratapSingh我得到的路径是正确的<代码>E:\~redact~\resources\app\app\files\scripts\files\t.bat(使用
remote.app.getAppPath()+'\\app\\files\\scripts\\files\\t.bat'
)我已验证,这是文件的位置
\uu dirname
给我
E:\~redact~\resources\app\app
你能使用异步版本并检查是否有错误吗?或者它正在工作?@AritraChakraborty如果我使用异步版本,如何确保文件被复制?在转到脚本的下一部分之前,必须复制这些文件。(脚本的下一部分将关闭计算机)@GrumpyCrouton只需在回调函数中插入下一部分?我认为情况并非如此,因为我认为OOBE模式下没有反病毒运行。即使有,我的应用程序也有管理员权限。我不认为这里是这样,因为我不认为在OOBE模式下运行反病毒。即使有,我的应用程序也具有管理员权限。是否可以从渲染器进程触发此操作?我只想在用户执行操作时复制文件,并且必须满足其他特定的标准,这些标准都是在客户端设置的。当
nodeintegration:true
我也不明白时,fs在客户端工作