ClickOnce部署问题

4
我在ClickOnce部署后签署应用程序时遇到了麻烦。
该应用程序是一个winforms项目,具有3个类库项目,并部署到共享文件路径中。
从Visual Studio发布可行,如果我运行应用程序,它会安装得很好,尽管在Windows 10上出现了未被识别的警告: Windows protected your PC screenshot 所以,作为一个愚蠢而有帮助的程序员,我想为我的用户尝试删除警告消息。
  • 第一步是创建签名证书。幸运的是,系统管理员能够为我创建一个内部证书,我也成功地通过阅读这篇文章学会了如何导出它。
  • 然后我使用Mage UI签署清单。在这个阶段,我不知道“清单”究竟是什么。找到Mage也是一个问题,因为部署服务器上没有安装Windows SDK。最终我远程登录到部署服务器并从自己的PC上运行了Mage。使用Mage签署随机文件,我最终弄清楚需要签署此答案中提到的所有.application + .manifest文件。
  • 此时我遇到了一个清单中的引用与下载的程序集的标识不匹配错误,在尝试此问题中提到的10种不同方法后,我开始在这里发布帖子。
  • 然后我发现了这篇MSDN文章,他们建议文件在某种程度上是损坏的。哪个文件?比较之前和之后的文件后,我注意到.application文件仍然将.manifest文件的产品密钥设置为“000000000000000”,而不是新签名的产品密钥。
  • 所以我回到Mage中重新选择了清单的“应用程序引用”并再次签名。这时我又遇到了另一个错误找不到路径 \\MyFileShare\Application%20Files\MyApplication_1_0_0_23\MyApplication.exe.manifest
  • 最终我弄清楚Mage已经使用urlencoding破坏了文件路径。我在记事本中修复了%20 并再次在Mage中签署,它成功了!!!

我肯定做错了什么,微软不可能打算让这么难吧?


TLDR;

有没有一种正确的方法可以运行Mage以一次性签署应用程序,而不必手动编辑文件并多次重新签名?


我不确定2015年是否在同一位置,但在2010年的项目属性中,签名选项卡在发布选项卡上方几个插槽处。对于我的ClickOnce项目,它有一个复选框来“签署ClickOnce清单”。 - Lithium
@Lithium 是的,我有那个选项 - 但是在开发环境中我无法访问证书,所以我需要在部署后签名。 - JumpingJezza
我不知道在开发环境中为什么会出现“您无法访问证书”的情况?您需要管理此证书并将其与应用程序一起交付到生产环境中,管理员的工作是将您的证书添加到受信任的开发人员存储库中。 - Marco Guignard
@MarcoGuignard 这是一张内部证书,而且它在一个单独的Active Directory域中(对我来说是外部的)。我可以使用不同的用户VPN到生产环境进行部署。 - JumpingJezza
证书用于签署应用程序与活动目录用户无关!我确信Adobe在您的生产环境中没有用户。只需将其添加到正确的存储库中,以便生产域信任它即可。 - Marco Guignard
1
如果ClickOnce被排除在外,Microsoft为Visual Studio提供了一种MSI类型的安装程序项目。还有Squirrel,这是一个自更新程序,也被VSCode使用。 - user9993
2个回答

1
正如Marco Guignard在评论中指出的那样,可以将从任何地方创建的证书导出并导入到您的个人存储中,在Visual Studio中使用。
在Visual Studio中签名(pictures)并设置单独的发布+安装位置,使我可以完全绕过使用mage的需要!

1

根据我的经验,自动化工具可以很好地处理ClickOnce及其相关工具的所有细节,但手动操作确实是一个真正的挑战。

对我非常有用的资源是手动部署ClickOnce应用程序演练手动部署不需要重新签名且保留品牌信息的ClickOnce应用程序演练

选项:

  • 使用Visual Studio提供的自动化工具来签名和部署您的应用程序。(它也有缺点,但至少它能够工作,某种程度上);
  • 花费大量时间自动化和调整您的过程,就像您目前所做的那样。最终,您将从中受益,因为您对最终结果有更多的控制权;
  • 使用其他部署方法,如MSI。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接