C#获取服务详细信息ExecutionEngineException异常
我在C#中调用Windows API获取服务详细信息时引发了ExecutionEngineException异常,但调试时发现已经得到了正确的信息
请高手帮帮忙,看看问题出在哪
代码如下:
[StructLayout(LayoutKind.Sequential)]
         public struct QUERY_SERVICE_CONFIG
         {
             public int dwServiceType;
             public int dwStartType;
             public int dwErrorControl;
             public string lpBinaryPathName;
             public string lpLoadOrderGroup;
             public int dwTagId;
             public string lpDependencies;
             public string lpServiceStartName;
             public string lpDisplayName;
         }
         [StructLayout(LayoutKind.Sequential)]
         public struct SERVICE_DESCRIPTION
         {
             public string lpDescription;
         }
         //连接服务控制管理器
         [DllImport("Advapi32.dll")]
         extern static int OpenSCManager(string lpMachineName, string lpDatabaseName, int dwDesiredAccess);
         //打开服务
         [DllImport("Advapi32.dll")]
         extern static int OpenService(int hSCManager, string lpServiceName, int dwDesiredAccess);
         //获取服务配置
         [DllImport("Advapi32.dll")]
         extern static bool QueryServiceConfig(int hService,out QUERY_SERVICE_CONFIG QueryServiceConfig, int cbBufSize, out int  
pcbBytesNeeded);
         //获取服务描述
         [DllImport("Advapi32.dll")]
         extern static bool QueryServiceConfig2(int hService, int dwInfoLevel, out SERVICE_DESCRIPTION ServiceDescription, int  
cbBufSize, out int pcbBytesNeeded);
         //获取错误代码
         [DllImport("Kernel32.dll")]
         extern static int GetLastError();
QUERY_SERVICE_CONFIG qsc = new QUERY_SERVICE_CONFIG(String serviceName);
         SERVICE_DESCRIPTION sd = new SERVICE_DESCRIPTION();
         public void GetLocalServiceAttribute()
         {
             int hSCManager = OpenSCManager(null, null, 0xF003F);////SC_MANAGER_ALL_ACCESS (0xF003F)
             if (hSCManager != 0)
             {
                 int hService = OpenService(hSCManager, serviceName, 0xF01FF);////SERVICE_ALL_ACCESS (0xF01FF)
                 if (hService != 0)
                 {
                     int dwError=0, cbBufSize=0, dwBytesNeeded=0;
                     if (!QueryServiceConfig(hService, out qsc, 0, out  dwBytesNeeded))
                     {
                         dwError = GetLastError();
                         if (dwError == 122)
                         {
                             cbBufSize = dwBytesNeeded;
                         }
                         else
                         {
                             MessageBox.Show("Query Service: " + serviceName + "'s Config Failed!");
                         }
                     }
                     if (!QueryServiceConfig(hService, out qsc, cbBufSize, out dwBytesNeeded))
                     {
                         MessageBox.Show("Query Service: " + serviceName + "'s Config Failed!");
                     }
                     if (!QueryServiceConfig2(hService, 1, out sd, 0, out dwBytesNeeded))
                     {
                         //第二个参数:dwInfoLevel:1==SERVICE_CONFIG_DESCRIPTION
                         dwError = GetLastError();