2016-04-05 13 views
0

Beim Versuch, einen Handler mit CreateFile() zu erstellen, selbst wenn ich die Anwendung als Administrator ausführe, erhalte ich die folgende Fehlermeldung: 'Das System konnte nicht gefunden werden die angegebene Datei. (Ausnahme von HRESULT: 0x80070002) ". Nothing‘CreateFile() Funktioniert in Windows XP, schlägt aber in Windows 7 fehl Rückgabe Handle ungültig

Hier ist ein Beispiel des Codes für diese Aufgabe verwendet:

Private Enum EFileAccess As System.Int32 
     GENERIC_WRITE = &H40000000 
End Enum 

Friend Enum EFileShare   
    FILE_SHARE_READ = &H1 
    FILE_SHARE_WRITE = &H2 
End Enum 

Friend Enum ECreationDisposition   
    OPEN_EXISTING = 3 
End Enum 

Friend Enum EFileAttributes 
    FILE_FLAG_NO_BUFFERING = &H20000000 
End Enum 

<DllImport("kernel32.dll", SetLastError:=True, CharSet:=System.Runtime.InteropServices.CharSet.Auto)> _ 
    Private Shared Function CreateFile(ByVal lpFileName As String, _ 
           ByVal dwDesiredAccess As EFileAccess, _ 
           ByVal dwShareMode As EFileShare, _ 
           ByVal lpSecurityAttributes As IntPtr, _ 
           ByVal dwCreationDisposition As ECreationDisposition, _ 
           ByVal dwFlagsAndAttributes As EFileAttributes, _ 
           ByVal hTemplateFile As IntPtr) As Microsoft.Win32.SafeHandles.SafeFileHandle 
    End Function 

der Pfad auf einen Matrixdrucker in einem Windows Server 2003

handle = CreateFile(\\brbhzpc001154\Epson_2180, 
           EFileAccess.GENERIC_WRITE, 
           EFileShare.FILE_SHARE_READ Or EFileShare.FILE_SHARE_WRITE, 
           IntPtr.Zero, 
           ECreationDisposition.OPEN_EXISTING, 
           EFileAttributes.FILE_FLAG_NO_BUFFERING, 
           IntPtr.Zero) 

Diese Anwendung, wenn in Windows XP ohne Fehler funktioniert kompiliert, aber wenn in Windows 7, der Fehler oben immer beschrieben auszuführen versuchen, geschieht.

+0

Möglicherweise müssen Sie "Als Administrator" ausführen –

+1

"... auch beim Ausführen der Anwendung als Administrator, ..." – msantiago

Antwort

1

Es gibt Lösungen here, die darauf hindeuten, dass das Ändern von OPEN_EXISTING zu OPEN_ALWAYS auf Win7 es mit Win7 arbeiten lassen wird, aber ohne Erklärung warum.