ClickOnce设计我们的可执行文件并说“Unknown Publisher”

时间:2012-05-01 00:33:12

标签: .net deployment clickonce

我们正在开发一个通过ClickOnce部署的应用程序。我们有一个VeriSign代码签名证书,我们用它来签署我们的应用程序(通过signtool.exe post-build)和ClickOnce清单。我们目前有两个与签名有关的问题:

  1. 我们正在使用我们的证书签署.exe。构建我们的应用程序后,我们可以看到它已签名(例如,通过“signtool verify / pa TheExecutable.exe”)。但是在通过ClickOnce安装应用程序后,.exe不再签名。

  2. 我们正在使用我们的证书签署ClickOnce舱单。但是当我们尝试通过ClickOnce安装应用程序时,ClickOnce安装程序会显示“Unknown Publisher”。

  3. 问题#1总是发生。问题#2有时会神秘地消失,但此后不久就会回来,我们已经持续了几周了。

    有什么想法吗?

4 个答案:

答案 0 :(得分:14)

好的,解决了这个问题的1/2的谜团:ClickOnce从bin获取应用程序清单,但从obj获取实际的EXE。为了分发您签名的exe,您必须在obj目录中签署该文件。

编辑:这是另一半。安装.NET 4.5 Beta会破坏ClickOnce签名/验证,即使在VS2010中也是如此。

答案 1 :(得分:7)

以下是我处理清单签名和签署exe的方法。我将它添加到我的.csproj文件的底部(在文本编辑器中编辑)。

  <Target Name="AfterBuild">
    <CallTarget Targets="SignOutput" />
    </Target>
    <Target Name="SignOutput">
    <PropertyGroup>
      <TsUrl>http://timestamp.comodoca.com/rfc3161</TsUrl>
    </PropertyGroup>
    <ItemGroup>
      <SignableFiles Include="$(ProjectDir)obj\$(ConfigurationName)\myappname.exe" />
    </ItemGroup>
    <Exec Command="signtool.exe sign /n &quot;My Company Name LLC&quot; /tr $(TsUrl) &quot;%(SignableFiles.Identity)&quot;" />
  </Target>

答案 2 :(得分:4)

保罗,我会跟你说实话。我从来没有对ClickOnce感到非常激动。除了手动发布/部署方面,该工具集似乎从未真正成熟。通过MSBuild运行这些东西从来都不是一个很好的体验,Mage.exe似乎总是对我有问题。大多数时候,我的问题都围绕着没有正确设置的版本号。

那就是说,我认为我们最大的麻烦来自尝试通过Visual Studio中的设置UI来管理事物。尝试依赖MSBuild“magic”并将必要的参数传递给MSBuild并在csproj文件中进行更多控制对我有所帮助。

我不知道你的构建设置是什么样的,但是,对于我们来说,我们Jenkins运行一个Rake文件,在解决方案上调用MSBuild。这允许我们从Rake文件向MSBuild发送特定参数。

具体来说,我们会推送ApplicationVersionApplicationRevisionMinimumRequiredVersionOutDir的值。至于csproj本身需要注意的事项,您需要确保设置ManifestCertificateThumbprintManifestKeyFileGenerateManifestsSignManifests。我们还将默认构建目标设置为Publish,但我不确定这些是否相关。

我无法说出为什么ClickOnce将“取消签名”您的可执行文件,可能您签署的可执行文件可能不是您认为正在ClickOnce包中打包的那个。换句话说,它可能正在构建一个新的可执行文件并将其丢弃在包中,而不是您已签名的那个。我想我必须更多地了解你的设置才能确定这个电话。

对于它的价值,如果我能再做一次,我不会把我的鸡蛋放在ClickOnce篮子里。对于那些运行Internet Explorer或者你已经安装了Chrome插件的人来说,这真的只是一次很棒的体验。这是更多的工作,但我目前正在研究模仿Chrome更新故事的解决方案。他们有一个适用于Internet Explorer用户的ClickOnce软件包,但它实际上仅用于下载安装Chrome.exe和Update.exe的Windows安装程序包。他们在the technical documentation中为奥马哈(也称为谷歌更新)提供了大量详细信息。

答案 3 :(得分:-1)

自行签署setup.exe时出现问题。我在为MSFT的P&amp; P家伙撰写ClickOnce文章时遇到了这个问题。它没有解决方法。

您的证书是否已安装在用于生成部署的用户帐户的证书库中?它是否在VS解决方案本身中指定为文件?如果它是默认值,并且您使用msbuild和mage生成部署,它是否可以签名好吗?