2016-04-05 1 views
0

En essayant de créer un gestionnaire using CreateFile(), même en exécutant l'application en tant qu'administrateur, j'obtiens le message d'erreur suivant: «Le système n'a pas pu trouver le fichier spécifié. (Exception de HRESULT: 0x80070002) ". Rien neCreateFile() Fonctionne dans Windows XP mais échoue dans Windows 7 retour Handle Invalid

Voici un échantillon du code utilisé pour cette tâche:

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 

Les points de chemin à une imprimante matricielle dans un environnement 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) 

Cette application, lors de la compilation fonctionne sans erreur dans Windows XP, mais lorsque vous essayez d'exécuter dans Windows 7, l'erreur décrite ci-dessus se produit toujours.

+0

Vous devrez peut-être exécuter "As Administrator" –

+1

"... même lors de l'exécution de l'application en tant qu'administrateur, ..." – msantiago

Répondre

1

Il y a des solutions here qui suggèrent que sur Win7 en changeant OPEN_EXISTING à OPEN_ALWAYS cela va fonctionner sur Win7, mais sans explication pourquoi.