进程列表Win32Exception“拒绝访问”

时间:2013-09-25 21:55:00

标签: c# wpf win32-process

我在VFP中有一个应用程序,正在迁移到.NET c#,作为这个应用程序的桌面我们必须使用桌面

vfp中的桌面版:它具有所有菜单,如果选项在.net上实现,那些菜单会将所选选项保存在SQLServer表中。

桌面2在wpf中:它有一个计时器,用于读取桌面用户点击的选项(vfp)

如果桌面2找到一个选项,并且此选项与预期用户匹配,则会尝试打开该选项并将其设置为最顶层。

这项工作做得很好但有时会抛出win32异常访问被拒绝

[ClassInterface(ClassInterfaceType.AutoDual)]
[ProgId("MyClass")]
public class DesktopsAux
{
    public string[] Desktops;
    public string desktopname = "My App! .Net Desktop";
    public IntPtr hWnd; 

    public DesktopsAux()
    {
        try
        {
            var q = from d in Process.GetProcesses()
                         where d.MainWindowTitle.Contains(desktopname) 
                         select d.MainWindowTitle;

            Desktops = q.ToArray();
        }
        catch (NullReferenceException)
        {
        }
    }

    public bool DeskTopForUser(string userName)
    {
        //  The error happen here, performing this query
        var q = from d in Process.GetProcesses()
                where d.MainWindowTitle.Contains(desktopname)
                select new {d.MainWindowTitle , d.Handle};
        var list = q.ToList();
        var q2 = from a in list
                 where a.MainWindowTitle.Contains(userName)
                 select a;

        if (q2.Count() > 0)
        {
            hWnd = q2.First().Handle;
            return true;
        }
        return false;
    }
}

public class Desktop
{
    public string MainWindowTitle { get; set; }
    public IntPtr Handle { get; set; }
}

执行查询时,DeskTopForUser方法中发生错误。

为什么会出现这种错误? 如何防止此错误?

0 个答案:

没有答案