VB.NET в Vista попытка получить дату (сегодня) вызывает исключение безопасности
Вопрос
У меня есть программа VB6, которую кто-то недавно помог мне преобразовать в VB.NET
В программе при сохранении файлов я помечаю их датой, которую я получал, вызывая функцию Today().
Когда я пытаюсь запустить новый VB.NET код в Vista, он выдает исключение разрешения для Today().Если я запускаю Visual Studio Express (это версия 2008 Express) в режиме администратора, то проблема не возникает, но очевидно, что я хочу получить автономную программу, которая работает для всех пользователей без дополнительных разрешений.
Итак, как обычная программа VB.NET в Vista может получить сегодняшнюю дату?
Решение
Использование DateTime.Now
или DateTime.Today
.Они полностью управляются и не должны вызывать исключений безопасности.
Старые функции VB6, такие как Len()
, Left()
, Right()
, OpenFile()
, FreeFile()
все они присутствуют в .NET Framework в библиотеке DLL Microsoft.VisualBasic.Чтобы поддерживать обратную совместимость, все они вызывают старые функции в неуправляемом коде.Неуправляемый код требует специальных разрешений безопасности, поскольку он может быть опасным.
Всякий раз, когда это возможно, попробуйте использовать более новые функции .NET.Обычно они намного быстрее (например, ввод-вывод файлов с использованием потоков) и безопаснее.
Другие советы
Когда я пытаюсь выполнить следующее утверждение:
Dim result As String = Today()
Это дает мне сегодняшнюю дату, как я и ожидал, и я запускаю VB2005 в Vista.Можете ли вы изменить вопрос с помощью используемой вами версии VB?Кроме того, можете ли вы попробовать следующее утверждение вместо Today()
видеть, что это работает для вас без исключения?
Dim result As String = Now()
Функция Today() должна корректно работать в Vista.Я полагаю, что за кулисами это просто оценка свойства DateTime.Today, поэтому оно не должно вызывать никаких исключений.Если вы переносите VB на VB.NET вам, вероятно, следует продолжить и использовать свойство DateTime.Today, а не код совместимости с VB6.