嵌入清单后无法签署bootstrapper可执行文件(setup.exe)

时间:2013-02-21 10:35:45

标签: clickonce signing bootstrapper signtool mt

我们正在使用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>

如果我在嵌入清单之前签名但没有错误,但它无法正常工作,因为任何文件都需要在更改后重新签名。

我也尝试了以下步骤:

  1. sign setup.exe
  2. 嵌入清单
  3. resign setup.exe(此步骤中的错误与上述相同)
  4. 是否有解决此问题的解决方案/解决方法?

2 个答案:

答案 0 :(得分:1)

我找不到引用的来源,但是我前一段时间遇到了类似的问题,你无法签署以前签名的setup.exe。您可以从头开始生成引导程序(see MSDN),应用清单然后对其进行签名(第一次!)它应该可以正常工作。

答案 1 :(得分:0)

结论

有时,混淆器工具会生成一个不可签名文件。意思是, signtool 对于我尝试的任何操作都返回错误0x80070057。

我还注意到,“无效”文件上的版本语言属性为空白,请参见first DLL is valid while the second one is not

所以,我的结论是,这与文件本身有关,而不是与签名工具或签名服务器有关。

我如何得出这个结论

我尝试了所有建议的答案:

我尝试使用多个标志服务器: