我们正在使用Nant使用Clickonce准备我们软件的设置。
使用signtool签署dll(s)和exe(s)。
signtool命令:signtool sign /f ${certFile} /p ${certFilePwd} {path of setup.exe}
使用 Mt.exe 在exe文件中嵌入清单。
Mt命令:mt -manifest {manifest file} -outputresource:{filepath};#1
我们有两个exe文件。一个是我们的app.exe,第二个是setup.exe(由clickonce创建的bootstrapper)
嵌入清单后,app.exe在签名时没有问题。
但是,在嵌入清单后签署setup.exe 会出现以下错误:
SignTool Error: SignedCode::Sign returned error: 0x80070057. The parameter is incorrect.
清单文件包含:
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<ms_asmv2:trustInfo xmlns:ms_asmv2="urn:schemas-microsoft-com:asm.v2">
<ms_asmv2:security>
<ms_asmv2:requestedPrivileges>
<ms_asmv2:requestedExecutionLevel level="asInvoker"
uiAccess="false"></ms_asmv2:requestedExecutionLevel>
</ms_asmv2:requestedPrivileges>
</ms_asmv2:security>
</ms_asmv2:trustInfo>
</assembly>
如果我在嵌入清单之前签名但没有错误,但它无法正常工作,因为任何文件都需要在更改后重新签名。
我也尝试了以下步骤:
是否有解决此问题的解决方案/解决方法?
答案 0 :(得分:1)
我找不到引用的来源,但是我前一段时间遇到了类似的问题,你无法签署以前签名的setup.exe。您可以从头开始生成引导程序(see MSDN),应用清单然后对其进行签名(第一次!)它应该可以正常工作。
答案 1 :(得分:0)
有时,混淆器工具会生成一个不可签名文件。意思是, signtool 对于我尝试的任何操作都返回错误0x80070057。
所以,我的结论是,这与文件本身有关,而不是与签名工具或签名服务器有关。