CreateFile() 在 Windows XP 中有效,但在 Windows 中失败 7 return 句柄无效
CreateFile() Works in Windows XP but fails in Windows 7 return Handle Invalid
尝试使用 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 中尝试执行时,总是会出现上述错误。
有解决方案 here 建议在 Win7 上将 OPEN_EXISTING 更改为 OPEN_ALWAYS 将使其在 Win7 上运行,但没有解释原因。
尝试使用 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 中尝试执行时,总是会出现上述错误。
有解决方案 here 建议在 Win7 上将 OPEN_EXISTING 更改为 OPEN_ALWAYS 将使其在 Win7 上运行,但没有解释原因。