我有一个打开服务数据库的 .NET VB winforms 程序,在从 .NET v2 转换为 v4 后它停止工作。从 VB .NET v4 及更高版本调用时,advapi32.dll 中的函数 openscmanager 返回无效句柄。
为 .NET v2 到 v3.5 编译的所有工作正常,但在同一台机器上为 .NET V4 及更高版本编译时失败
在安装了 .NET 4.5.1 和 4.6.1 的 Windows Server 2012 R2 上使用 Visual Studio V2013 或 V2015 有趣的是,相同的代码在 Windows 7 64 位下也可以正常工作,也安装了相同的框架版本
精简代码:
Imports System.Runtime.InteropServices
Public Class Form1
Const SC_MANAGER_CREATE_SERVICE As Int32 = &H2
Dim scHandle As Int32 = 0
Declare Function OpenSCManager Lib "advapi32.dll" Alias "OpenSCManagerA" _
(ByVal lpMachineName As String, _
ByVal lpDatabaseName As String, _
ByVal dwDesiredAccess As Integer) As Int32
Declare Function CloseServiceHandle Lib "advapi32.dll" Alias "CloseServiceHandle" _
(ByVal hSCObject As IntPtr) As Boolean
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
scHandle = OpenSCManager(".", Nothing, SC_MANAGER_CREATE_SERVICE)
scHandle = CloseServiceHandle(scHandle)
MsgBox(New System.ComponentModel.Win32Exception(Marshal.GetLastWin32Error()).ToString)
End Sub
End Class
在 .NET v2 下编译返回:
"System.ComponentModel.Win32Exception: The operation completed successfully"
在 .NET v4 下编译返回:
"System.ComponentModel.Win32Exception (0x80004005): The handle is invalid"
关于如何解决这个问题的任何想法?