2008-09-15 8 views
2

ich ein VB6 Programm, das jemand vor kurzem hat mir geholfen,VB.NET auf Vista, versuchen Datum zu erhalten (Heute) verursacht Sicherheitsausnahme

Im Programm zu VB.NET zu konvertieren, beim Speichern von Dateien, ich stempeln sie mit das Datum, das ich erhielt, indem ich die Today() Funktion aufruft.

Wenn ich versuche, den neuen VB.NET-Code in Vista auszuführen, wird eine Berechtigungsausnahme für Today() ausgelöst. Wenn ich Visual Studio Express (dies ist die 2008 Express-Version) im Admin-Modus ausführen, tritt das Problem nicht auf, aber klar möchte ich mit einem eigenständigen Programm enden, das für alle Benutzer ohne besondere Berechtigungen ausgeführt wird.

Also, wie kann ein normales VB.NET-Programm in Vista das heutige Datum bekommen?

Antwort

10

Verwenden Sie DateTime.Now oder DateTime.Today. Diese werden vollständig verwaltet und sollten keine Sicherheitsausnahmen auslösen.

Die alten VB6-Funktionen wie Len(), Left(), Right(), OpenFile(), FreeFile() sind alle in der .NET Framework in der Microsoft.VisualBasic DLL. Um die Abwärtskompatibilität aufrechtzuerhalten, rufen sie alle die alten Funktionen in nicht verwaltetem Code auf. Nicht verwalteter Code erfordert spezielle Sicherheitsberechtigungen, da dies gefährlich sein kann.

Versuchen Sie nach Möglichkeit, die neueren .NET-Funktionen zu verwenden. Sie sind normalerweise viel schneller (File IO mit Streams zum Beispiel) und sicherer.

0

Wenn ich versuche, die folgende Anweisung:

Dim result As String = Today() 

Es gibt mir das heutige Datum, wie ich erwarten würde, und ich bin mit VB2005 auf Vista. Können Sie die Frage mit der Version von VB ändern, die Sie verwenden? Können Sie auch die folgende Anweisung anstelle von Today() versuchen, um zu sehen, dass es ohne die Ausnahme für Sie funktioniert?

Dim result As String = Now() 
0

Die Today() - Funktion sollte sich unter Vista ordnungsgemäß verhalten. Ich glaube, dass hinter den Kulissen nur die DateTime.Today -Eigenschaft ausgewertet wird, also sollte es keine Ausnahmen auslösen. Wenn Sie VB nach VB.NET portieren, sollten Sie wahrscheinlich die DateTime.Today-Eigenschaft anstelle des VB6-Kompatibilitätscodes verwenden.

Verwandte Themen