VFP にアプリがあり、.NET c# への移行プロセスが進行中です。これの aprt として、アプリのデスクトップに移動する必要があります。
vfp のデスクトップ 1: すべてのメニューがあり、オプションが .net に実装されている場合、これらのメニューは選択したオプションを SQLServer テーブルに保存します。
wpf のデスクトップ 2: デスクトップ 1 (vfp) でユーザーがクリックしたオプションを読み取るタイマーがあります。
オプションがデスクトップ 2 によって検出され、このオプションがユーザーの予想と一致する場合、オプションを開いて最上位に設定しようとします。
これはうまくいきますが、時々 win32 Exception Access denied を投げます
[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 メソッドでエラーが発生します。
なぜこのエラーが発生するのですか? このエラーを防ぐにはどうすればよいですか?