NodeJS子进程使用省略号截断输出字符串



我目前正在使用Electron开发一个应用程序。该应用程序所做的动作之一是";验证版本";TeamSpeak 3客户端插件。为此,我运行了一个命令,检查插件文件的SHA256哈希,并将其与另一个字符串进行比较。

powershell.exe Get-FileHash $env:APPDATATS3Clientpluginstokovoip_win32.dll

我对tokovoip_win64.dll运行相同的命令。这对大多数人都有效。然而,对于我的应用程序的一个用户来说,它会崩溃。

在命令上运行正则表达式之后

const win32ActualHash = /SHA256s+?(S+?)s/gm.exec(await child.execSync(
'powershell.exe Get-FileHash $env:APPDATA\TS3Client\plugins\tokovoip_win32.dll'))[1];
const win64ActualHash = /SHA256s+?(S+?)s/gm.exec(await child.execSync(
'powershell.exe Get-FileHash $env:APPDATA\TS3Client\plugins\tokovoip_win64.dll'))[1];

预期输出为

win32ActualHash = 'DDCF282FDC439DE4E560F74231B22850EB7016573730A0CD94B08AAEECDEC167';
win64ActualHash = 'AA38ED69966741C4D68E964F05CB16351EC5700E337D953B07DB81D7FB3891C7';

然而,这个用户得到的输出是

win32ActualHash = 'DDCF282FDC439DE4E560F74231B22850EB7016573730A0CD94B08AAEECDE...';
win64ActualHash = 'AA38ED69966741C4D68E964F05CB16351EC5700E337D953B07DB81D7FB38...';

我测试解决方案的设置非常有限,因为我无法重新创建此场景,并且我不想向该用户发送可能的修复程序。

是什么导致这些字符串被截断,我如何防止这种情况发生?

我通过在powershell命令中将其管道传输到Format-List来解决这个问题

powershell.exe "Get-FileHash $env:APPDATATS3Clientpluginstokovoip_win32.dll  | Format-List"

然后更改RegExp以提取哈希

const win32ActualHash = /Hashs*?:s*(S*)s*/gm.exec(await child.execSync(
'powershell.exe "Get-FileHash $env:APPDATA\TS3Client\plugins\tokovoip_win32.dll | Format-List"'))[1];
const win64ActualHash = /Hashs*?:s*(S*)s*/gm.exec(await child.execSync(
'powershell.exe "Get-FileHash $env:APPDATA\TS3Client\plugins\tokovoip_win64.dll | Format-List"'))[1];

Format-List似乎从不截断字符串,从而提供一致的输出

相关内容

  • 没有找到相关文章

最新更新