Javascript copyFileSync未复制文件且未引发错误
我正在nodejs/Electron客户端中运行一个用JavaScript编写的函数 此功能用于将文件从用户的闪存驱动器复制到他们的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.
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在客户端工作