我目前正在使用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
似乎从不截断字符串,从而提供一致的输出