|
分類:[C#]
いつもお世話になっております。今C#でサービスアプリケーションを作成しています。
サービスよりプロセス情報を読み取り、特定のプログラムのウィンドウのタイトルをログに残すものを作成したいと考えています。
実際に作成してみてサービスをインストールし、実行してみると、なぜかプロセスのハンドラが0になって取得できません。
サービスのログオン情報で、ローカルシステム(&『デスクトップとの対話をサービスに許可』チェック)やアカウント指定にして試しましたが現象は変わりませんでした。
また、プロセスの取得ロジックをコンソールアプリケーションで行うとうまく動きます。なので、サービスに関わるものが原因なのかと考えています。
いろいろ調べてみたのですが解決できず困っています。
何かご存知の方がおられましたらご教授頂けませんでしょうか。
環境は VisualStudio2010、.NET Framework2.0で作成、Windows7で動作確認 です。
尚プログラムは以下のようなものです。
**************************************************************************************************************
public partial class MyService : ServiceBase
{
private static System.Threading.Timer timer;
protected override void OnStart(string[] args)
{
var tc = new TimerCallback(obj => {
var sb = new StringBuilder();
var processes = Process.GetProcessesByName("プログラム名");
foreach (Process p in processes)
{
var hnd = p.MainWindowHandle; //←ここで0しか取得できない
sb.AppendLine(hnd.ToString());
}
System.IO.StreamWriter sw = new System.IO.StreamWriter(@"c:\test.log", true, System.Text.Encoding.GetEncoding("shift_jis"));
sw.Write(sb.ToString());
sw.Close();
});
timer = new System.Threading.Timer(tc, null, 0, 1000);
}
protected override void OnStop()
{
timer = null;
}
}
**************************************************************************************************************
プロセスは取れているようなのですが、ハンドラの数字が取れません。
お手数ですがよろしくお願いします。
|