Vista 上的 VB.NET,尝试获取日期(今天)导致安全异常
题
我有一个 VB6 程序,最近有人帮我转换为 VB.NET
在程序中,保存文件时,我用通过调用 Today() 函数获取的日期来标记它们。
当我尝试在 Vista 中运行新的 VB.NET 代码时,它会抛出 Today() 的权限异常。如果我在管理模式下运行 Visual Studio Express(这是 2008 Express 版本),则不会出现问题,但显然我希望最终得到一个独立的程序,该程序可以为所有没有特殊权限的用户运行。
那么Vista中的普通VB.NET程序如何获得今天的日期呢?
解决方案
使用 DateTime.Now
或者 DateTime.Today
. 。这些是完全托管的,不应引发安全异常。
旧的 VB6 函数,例如 Len()
, Left()
, Right()
, OpenFile()
, FreeFile()
全部存在于 .NET Framework 的 Microsoft.VisualBasic DLL 中。为了保持向后兼容性,它们都在非托管代码中调用旧函数。非托管代码需要特殊的安全权限,因为它可能很危险。
只要有可能,请尝试使用较新的 .NET 函数。它们通常更快(例如使用 Streams 的文件 IO)并且更安全。
其他提示
当我尝试以下语句时:
Dim result As String = Today()
正如我所期望的,它给了我今天的日期,并且我在 Vista 上运行 VB2005。您可以根据您使用的VB版本修改问题吗?另外,您可以尝试以下语句来代替 Today()
看看它对你毫无例外地有效吗?
Dim result As String = Now()
Today() 函数在 Vista 上应该可以正常运行。我相信它在幕后只是评估 DateTime.Today 属性,因此它不应该抛出任何异常。如果您要将 VB 移植到 VB.NET,您可能应该继续使用 DateTime.Today 属性,而不是 VB6 兼容性代码。