Предупреждение пользователя о неподписанном исполняемом файле - PullRequest
2 голосов
/ 02 февраля 2011

У меня есть приложение ClickOnce, которое играет роль заглушки - это небольшое приложение, которое просто загружает другой установщик. Он работает так, что загружает полезную нагрузку, запускает ее и закрывает. Это написано на C # .NET. Моя проблема в том, что полезная нагрузка динамическая. Я хочу, чтобы мое приложение ClickOnce отображало предупреждение для пользователя, если полезная нагрузка загруженного приложения не подписана. Это поведение автоматически присутствует, когда включен контроль учетных записей, однако моя заглушка работает на многих разных ОС, и я не знаю, включен ли контроль учетных записей или нет. Мне бы понравилось, если бы я мог просто вызвать предупреждение, которое делает Windows при запуске исполняемого файла - возможно ли это? Если нет, что вы рекомендуете?

Ответы [ 2 ]

2 голосов
/ 02 февраля 2011

Я предполагаю, что вы говорите о предупреждении, отображаемом при запуске программы, загруженной с веб-сайта.

Вам необходимо добавить Zone.Identifier Альтернативный поток данных в файл.
Вы можете сделатьчто с помощью этой библиотеки :

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 голос
/ 02 февраля 2011

В Win32 для проверки подписей Authenticode используется функция WinVerifyTrust. Нет эквивалента .NET BCL (насколько я знаю), но у pinvoke.net есть довольно хорошая статья о том, как использовать его из C #:

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

...