私はこのコードを持っています:
[PermissionSet(SecurityAction.Assert, Name = "FullTrust")]
public List<WinInfo> GetWindows()
{
try
{
var isFullTrust = Assembly.GetExecutingAssembly().IsFullyTrusted;
if (isFullTrust)
{
return Process.GetProcesses().Where(z => !string.IsNullOrEmpty(z.MainWindowTitle))
.Select(z => new WinInfo
{
ProcessID = z.Id,
ProcessName = z.ProcessName,
WinID = z.MainWindowHandle,
WindowTitle = z.MainWindowTitle
}).ToList();
}
else
return null;
}
catch (Exception ex)
{
Trace.Write(ex.Message);
return null;
}
}
現在のユーザー(管理者権限を持つ)でローカルコンピューターにテストインすると、正常に動作し、ウィンドウを持つすべてのプロセスが表示されます。しかし、「ローカルサービス」アカウントで実行されているWindowsサービスからこのコードを呼び出すと、リストは空になります。プロセスに接続し、デバッグを通じて、「Process.GetProcesses()」がすべてのプロセスを返すことがわかりましたが、ウィンドウがある場合でも、すべてのプロセスでMainWindowHandleが0、MainWindowTitleが空です。では、私のコードの何が問題になっていますか?
編集私はコードを編集しました。これにより、アセンブリが完全に信頼されているかどうかがチェックされ、コードに必要な権限を付与するPemmissionSetが作成されます。それでも結果は同じです。デバッグすると、「isFullTrust」が「True」であり、コードが例外なく実行されていることがわかります。空でないMainWindowTitleが含まれているプロセスはないため、リストは空のままです。