警告未签名的可执行文件的用户

问题描述:

我有一个ClickOnce应用程序,扮演一个存根的角色 - 它是一个小应用程序,只需下载另一个安装程序。它的工作方式是下载有效负载,运行并关闭。它是用C#.NET编写的。我的问题是有效载荷是动态的。如果应用程序下载的有效载荷未签名,我希望ClickOnce应用程序向用户显示警告。当启用UAC时,此行为会自动显示,但是我的存根会在许多不同的操作系统上运行,而且我不知道UAC是否已启用。如果我可以简单地调用Windows在可执行文件运行时执行的警告,我会喜欢它 - 这可能吗?如果不是,你推荐什么?警告未签名的可执行文件的用户

我假定您正在讨论运行从网站下载的程序时显示的警告。

您需要将Zone.Identifier替代数据流添加到文件中。
你可以做,使用this library

var fs = new NTFS.FileStreams(filename) 
fs.Add("Zone.Identifier") 
using (var writer = new StreamWriter(fs["Zone.Identifier"].Open()) { 
    writer.WriteLine("[ZoneTransfer]") 
    writer.WriteLine("ZoneID=4") 
} 

在Win32中,用来验证验证码签名的功能是WinVerifyTrust。没有.NET BCL当量(据我所知),但pinvoke.net对如何在C#中使用它一个很好的文章:

http://www.pinvoke.net/default.aspx/wintrust.winverifytrust