我正致力于在.NET 4.5上部署ClickOnce Application构建 以下是事实:
但是,无论我做什么,当我使用“立即发布”按钮实际发布ClickOnce应用程序时,所有文件都会被发布,但是当我下载“Setup.exe”时,它总是说“未知”出版商”。
关于我做错的任何想法?我已经研究了几个星期,我已经阅读了足够的信息,我正在“正确”地做到这一点,但我必须错过一些小的复选框或设置,或者当然。
任何帮助表示感谢。
- W.G。
答案 0 :(得分:4)
据我所知," Unknown Publisher"关键代码签名,Visual Studio没有为其提供接口。哦,它 具有签名接口,但仅用于清单签名和强名称程序集签名。 This other question也提到了三个签约。
获取&#34; Unknown Publisher&#34;替换为您的组织名称,您必须在.csproj或.vbproj文件中添加一些XML。在结束</Project>
代码之前,您需要拨打SignTool.exe,我手动将其复制到我的解决方案的主Bin文件夹中(如果您没有,它是Windows SDK的一部分)。这就是我的样子:
<!-- This section is used for code-signing the application. This should not be confused with manifest signing or with strong-name assembly signing, which can both be done from the Visual Studio interface. -->
<Target Name="SignOutput" AfterTargets="CoreCompile">
<PropertyGroup>
<TimestampServerUrl>http://timestamp.verisign.com/scripts/timstamp.dll</TimestampServerUrl>
<ApplicationDescription>A.Franklin's Awesome App</ApplicationDescription>
<SigningCertificateCriteria>/sha1 0c0ff5e29404b7d78q2517f487da0b1a0912c4da</SigningCertificateCriteria>
</PropertyGroup>
<ItemGroup>
<SignableFiles Include="$(ProjectDir)obj\$(ConfigurationName)\$(TargetName)$(TargetExt)" />
</ItemGroup>
<Exec Command=""$(ProjectDir)..\Bin\SignTool" sign $(SigningCertificateCriteria) /d "$(ApplicationDescription)" /t "$(TimestampServerUrl)" "%(SignableFiles.Identity)"" />
</Target>
要获取我已在机器上安装的证书的哈希码(&#34; 0c0ff5 ...&#34;上面),我
你也可以手动使用SignTool.exe,但对我来说,这个设置在每次编译时都会透明地运行。
答案 1 :(得分:0)
首先,您必须发布到IIS中的网站而不是UNC路径。发布到网站指向的文件夹。
其次,将证书导入MMC控制台上的“受信任的根证书颁发机构”文件夹。
然后最终签署清单时,在Visual Studio的“签名”选项卡上选择“从商店中选择”。我得到了这个与测试证书一起工作。
我希望它有所帮助。
由于
答案 2 :(得分:0)
检查您的应用程序清单是否用于信任信息(即发布者名称)。如果是这样,请确保发布者名称与证书的颁发者完全匹配。如果不匹配,则会出现“未知发行商”的问题。此设置位于Visual Studio的“发布”选项卡中。单击“选项...”按钮,然后单击“清单”列表项。
尝试取消选中“使用应用程序清单获取信任信息”,然后重新发布以查看问题是否已解决。如果确实需要选中该选项,请单击“描述”选项卡,并确保“发布者名称”值与代码签名证书颁发给的名称的值完全匹配。
答案 3 :(得分:0)
就我而言,我使用的是旧的 Comodo 时间戳服务器。截至目前,Comodo 现在是 Sectigo,他们对时间戳服务器进行了更改,因此现在他们默认使用 RFC3161 而不是 Authenticode。所以我只需要更改 Signtool.exe 参数以适应新服务器,使用新 url 将参数 /t 更改为 /tr,并添加参数 /td 以指定哈希算法。此更改是在 </project>
结束标记之前编辑 .csproj 文件进行的。
旧代码:
<Target Name="BeforePublish">
<Exec Command=""C:\Program Files (x86)\Windows Kits\10\App Certification Kit\signtool.exe" sign /f "$(ProjectDir)MyCert.p12" /t http://timestamp.comodoca.com/authenticode /p CertPassword /v "$(ProjectDir)obj\$(ConfigurationName)\$(TargetFileName)"" />
新代码:
<Target Name="BeforePublish">
<Exec Command=""C:\Program Files (x86)\Windows Kits\10\App Certification Kit\signtool.exe" sign /f "$(ProjectDir)MyCert.p12" /tr http://timestamp.sectigo.com /td SHA256 /p CertPassword /v "$(ProjectDir)obj\$(ConfigurationName)\$(TargetFileName)"" />
答案 4 :(得分:-1)
没有那么复杂。
第一,您只需要使用证书对清单进行签名即可。
第二,您需要将该证书安装到客户端PC上的“受信任的根证书颁发机构”存储中,这可以通过检查证书详细信息然后按照向导进行安装来进行,确保选择合适的商店。
此步骤会将未知的发布者更改为证书中的名称。(由于发布者现在位于受信任的根CA中,因此不再是“未知”),但是您仍然会提示您进行安装确认。
3rd ,您可以再次将证书安装到客户端PC上的“受信任的发布者”存储中,然后该发布者是受信任的发布者,您将不再得到提示,安装即会发生。 / p>
希望这可以帮助仍然面临问题的人。