【发布时间】:2019-07-02 14:45:46
【问题描述】:
我正在运行一个我在 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。我知道这段代码正在运行,因为在控制台中我得到了copying 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 脚本。
每个 copyFile 在继续之前都会检查错误,但它从不抛出错误,并且从不复制文件。
【问题讨论】:
-
你可以记录这个 remote.app.getAppPath() 还是使用 __dirname
-
@SuryapratapSingh 我得到的路径是正确的。
E:\~REDACTED~\resources\app\app\files\scripts\files\t.bat(使用remote.app.getAppPath() + '\\app\\files\\scripts\\files\\t.bat')我已经验证,这是文件的位置。__dirname给我E:\~REDACTED~\resources\app\app -
能不能用async的版本,看看有没有报错?或者它正在工作?
-
@AritraChakraborty 如果我使用异步版本,如何确保文件被复制?在移动到脚本的下一部分之前,必须复制这些文件。 (脚本的下一部分关闭计算机)
-
@GrumpyCrouton 只是将下一部分粘贴到回调函数中?
标签: javascript node.js electron