代码之家  ›  专栏  ›  技术社区  ›  msantiago

CreateFile()在Windows XP中工作,但在Windows 7中失败,返回句柄无效

  •  0
  • msantiago  · 技术社区  · 9 年前

    尝试使用CreateFile()创建处理程序时,即使以管理员身份执行应用程序,我也会收到以下错误消息:系统找不到指定的文件。(HRESULT异常:0x80070002)“:无。

    下面是用于此任务的代码示例:

    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
    

    路径指向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)
    

    此应用程序在Windows XP中编译时不会出现任何错误,但当尝试在Windows 7中执行时,总会出现上述错误。

    1 回复  |  直到 9 年前
        1
  •  1
  •   Stuart Whitehouse    9 年前

    有解决方案 here 建议在Win7上将OPEN_EXISTING更改为OPEN_ALWAYS将使其在Win7上工作,但没有解释原因。