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

时间:2011-02-02 03:00:58

标签: clickonce uac

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

2 个答案:

答案 0 :(得分:2)

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

您需要在文件中添加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")
}

答案 1 :(得分:1)

在Win32中,用于验证Authenticode签名的函数是WinVerifyTrust。没有.NET BCL等价物(据我所知),但是pinvoke.net有一篇关于如何在C#中使用它的文章:

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