项目场景:
提示:这里简述项目相关背景:
公司开发的某签章程序采用Electron技术,需要在用户完成签章后,把签章文件保存到指定的电脑本地目录.....
问题描述
提示:这里描述项目中遇到的问题:
为了便捷地唤起应用,我们在用户注册表中设置了自定义协议。这样,用户只需在浏览器地址栏输入特定的自定义协议(例如:自定义协议名://),即可启动程序。由于是通过协议唤起程序,传统的在启动时附加管理员权限的方法不再适用。因此,我们的解决方案是在程序运行期间,当需要保存文件到本地时,动态请求管理员权限。
因为上述唤起程序的方法,导致程序无法把文件保存到需要管理员权限的目录,如:
fs.writeFile(saveFilePath, data, (err) => {
if (err){
// 保存异常
return;
}
// 保存成功
}
解决方案:
提示:这里填写该问题的具体解决方案:
刷了一下CSDN、掘金,发现很多人推荐使用 @vscode/sudo-prompt保存文件 方法如下:
// content: '123456'
// filePath: C:/1.txt
sudo.exec(
`echo ${content} >${filePath}`,
{
name: 'Electron'
},
(error) => {
if (error) {
// 保存失败
return;
}
// 保存成功
}
)
但是上述方法在保存pdf时会损坏文件,无论内容的数据格式是buffer、ArrarBuffer、base64.....
于是我想到一个折中的办法:先把文件使用fs.writeFile方法保存到系统临时目录,然后使用 @vscode/sudo-prompt再把文件从临时目录移动到指定的电脑本地目录 方法如下:
// filePath: 临时目录/1.pdf
// movePath: C:/
sudo.exec(
`move ${filePath} ${movePath}`,
{
name: 'Electron'
},
(error) => {
if (error) {
// 保存失败
}
// 保存成功
}
)