为什么我的已签名的ClickOnce应用显示未知发布者

7
我希望创建一个易于安装的应用程序。 安装过程非常复杂(包括许多权限、防火墙规则、服务等)。 因此,我决定使用C#(.NET 4)编写设置程序,然后使设置程序本身成为单击安装。
我的想法是用户将转到网站,点击安装,我的设置程序将通过单击一次在他们的计算机上安装,然后运行,设置主程序。
为了使这个过程变得简单,显然我必须签署所有可执行文件。 我购买了Comodo代码签名证书,在我的证书存储中安装了它,并在VS Express 2012中勾选了“签名单击清单”。 我还包括了一个后构建步骤,其中运行了:
SIGNTOOL.EXE sign /f TrumphurstCodeCertificate.pfx /p <my password> TimeClockSetup.exe

我清空了生成文件夹和部署网站的所有内容,并进行了干净的构建。

我查看了生成文件夹中可执行文件的属性,显示是由我发布的。

我将程序发布到网站上,在另一台Windows 8电脑上导航到网站,然后单击“安装”按钮。

接着我收到提示是否要运行或保存setup.exe,我选择运行。

然后我又收到提示setup.exe不常见,可能会损害您的计算机 - 我点击操作,上面说此程序可能会损害您的计算机。但它确实显示出版商是Trumphurst Ltd,并给我选项继续运行,我点击了这个选项。

然后我得到了一个"打开文件 - 安全警告",指的是".....\TimeClockSetup.exe","发行商: 未知发行商"

为什么exe显示为未知发行商

我浏览到用户数据目录中的exe文件,没有在属性对话框中显示"数字签名"选项卡。

然而,如果我浏览到生成文件夹中的exe文件,它就有签名了。

[稍后]我记得曾在某个地方阅读到一些构建或发布过程使用obj文件夹中的exe文件而不是生成输出文件夹中的exe文件,因此我将签名添加到了后续构建步骤中 - 但并没有什么不同。


谢谢你的编辑,不管你是谁,我之前不知道反引号的用法。 - Nikki Locke
如果反引号仅在源代码上起作用,这也是它们的本意。对于内联引用(特别是包含引号的文本),我更喜欢使用斜体或粗体。 - groverboy
@NikkiLocke,我知道有点晚了,但你可以在Markdown帮助页面中找到更多的格式化帮助。 - Sheridan
1个回答

5
你需要为你的开发公司(或个人)购买Authenticode证书并签署应用程序。要签署,请查看项目属性并转到“签名”类别。选择“签署程序集”,然后可以选择要签署的证书。
确保这只是根证书,否则VS将无法使用它。此外,最终用户需要安装完整的证书路径,以便机器识别您为可信发布者。
如果从您的计算机导出具有完整证书路径的证书,则可以将此文件移动到客户端计算机并将证书安装到TrustedPublishers和Root-CA存储中。

看第二部分,用户需要将完整的证书路径安装到根CA和受信任的发布者存储中。 - ps2goat
1
一个 Authenticode 证书和 Comodo 签名证书有什么不同吗? - Nikki Locke
谢谢。无论如何,我重新导出了证书,并未勾选“包括所有证书”,然后将其添加到属性中的代码签名选项卡中。现在应用程序显示为已签名。我仍然想知道为什么signtool不起作用。购买Comode证书的整个目的是让用户不必覆盖安全警告或安装未知的根证书。 - Nikki Locke
Comodo的证书也可以使用,这是我用过的。我想Comodo可能不像更昂贵的证书(Digicert)那样进行背景检查。我不知道确切的答案。 - ps2goat

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