2017-03-31 19 views
1

我正在探索的数字签名功能在维克斯环境(Windows安装程序MSI和Windows补丁MSP)。
在我的情况下,我生成一个非嵌入式“Data1.cab”的MSI。Insignia添加的数字签名与PatchCertificates冲突?

什么,我已经明白这是很重要的:

  • 迹象任何外部驾驶室
  • 题微星与驾驶室的数字签名
  • 标志符号微星本身

我在官方的WiX insignia documentation以下在visual studio 2015中使用:
所以在* .wixproj文件中我添加了f下一节。
为简洁起见,省略了signtool.exe的其他命令行参数。

<Import Project="$(WixTargetsPath)" /> 
<PropertyGroup> 
    <SignOutput>true</SignOutput> 
</PropertyGroup> 
<Target Name="SignMsi"> 
    <Exec Command="signtool.exe sign /a &quot;%(SignMsi.FullPath)&quot;" /> 
</Target> 
<Target Name="SignCabs"> 
    <Exec Command="signtool.exe sign /a &quot;%(SignCabs.FullPath)&quot;" /> 
</Target> 

到目前为止这么好。
但我需要PatchCertificates未来UAC patches
所以在我* .wxs源文件我有:

<Product ... > 
<Package ... /> 

<Media Id="1" Cabinet="Data1.cab" EmbedCab="no"/> 

<PatchCertificates> 
    <DigitalCertificate SourceFile="$(env.MY_CERTIFICATE_DIRECTORY)/cert256.pem" Id="patchcert"/> 
</PatchCertificates> 

</product> 

现在当我编译Visual Studio中的项目,我总是得到以下错误:

C:\Program Files (x86)\WiX Toolset v3.10\bin\insignia.exe -im C:\src\Test\setup\obj\Release\bin\MyProduct.msi -out C:\src\Test\setup\obj\Release\bin\MyProduct.msi 
Insignia.exe(0,0): error INSG0001: Cannot find the requested object. 
Done building project "MyInstaller.wixproj" -- FAILED. 

-

观察:

  • 既fe对自己atures工作正常
  • ,但如果我将二者结合起来编译失败

是它们彼此不兼容?

-

额外的关键字:

  • WiX的属性:DigitalCertificate,PatchCertificates,的DigitalSignature
  • MSI表:MsiDigitalCertificate,MsiPatchCertificate,MsiDigitalSignature
  • 一般条款:数字证书,数字签名,维克斯,徽章,奉献,公钥

-

更新:
是它可能是因为这个bug(见 sourceforge,看 github)(2013年报道)的?

回答

1

我找到了解决方案。

我是包括PEM格式的证书:

<PatchCertificates> 
    <DigitalCertificate SourceFile="$(env.MY_CERTIFICATE_DIRECTORY)/cert256.pem" Id="patchcert"/> 
</PatchCertificates> 

DER格式,我们必须使用证书:

<PatchCertificates> 
    <DigitalCertificate SourceFile="$(env.MY_CERTIFICATE_DIRECTORY)/cert256_DER.cer" Id="patchcert"/> 
</PatchCertificates> 

也看到此相关的问题:DigitalCertificate (for UAC patches) - format specification?

PS:
ij由于特定的错误消息根本没有任何帮助,所以假设某些错误不兼容错误地使用了错误信息。
也很奇怪,只有组合这两个功能时才显示错误。