現在C#にて、あるアプリケーションが常に起動されている状態を保つためのサービスを作りたいのですが、うまく行きません。
どうすればいいのでしょうか?
現在は、System.Diagnostics.Processを用いて実現しようとしているのですが、タスクマネージャーを見るとたしかにうまく行ってるのですが、通常の、exeファイルをダブルクリックした時の挙動のようにウィンドウが出たりタスクアイコンに表示されたりもしておらず、機能もしておりません。
C#
1 2 private TaskFactory task = new TaskFactory(); 3 private CancellationTokenSource tokenSource = new CancellationTokenSource(); 4 private bool flag; 5 private Process p = new Process(); 6 7 public Service1() 8 { 9 InitializeComponent(); 10 } 11 12 protected override void OnStart(string[] args) 13 { 14 task.StartNew(() => 15 { 16 ProcessStartInfo psi = new ProcessStartInfo(); 17 psi.FileName = "アプリのパス"; 18 flag = true; 19 20 for (;;) 21 { 22 if (tokenSource.Token.IsCancellationRequested) 23 break; 24 if (flag) 25 { 26 try 27 { 28 p = Process.Start(psi); 29 } catch(Exception) 30 { 31 ExitCode = 1; 32 return; 33 } 34 } 35 flag = p.WaitForExit(30000); 36 } 37 }, tokenSource.Token); 38 } 39 40 protected override void OnStop() 41 { 42 RequestAdditionalTime(2000); 43 44 tokenSource.Cancel(); 45 46 ExitCode = 0; 47 }
よろしくお願いします。
常に起動されている側のアプリはどのような性質ですか?例えば複数のユーザーアカウントが同時にサインインしている時はそれら各ユーザーアカウント毎に起動している類のものですか? また、どのユーザーアカウントもログインしていないときでも起動していた方が良いものですか? 性質次第ではちょっとは踏み込んだ回答が可能かもしれないので、もしもまだ問題に悩んでいるのであればアプリの性質を追加して貰っても宜しいでしょうか。
試していたアプリは2つありまして、一つはSpinelというTVチューナーの電波をソフトウェア的に分配するようなソフトウェアです。そしてもう一つはWheelBallという、マウス操作でスクロールができるようになるようにするソフトです。どちらもウィンドウもしくはタスクトレイアイコンが表示されるタイプのアプリなんですが表示されませんし、実際の動作で不具合を生じました。ユーザーアカウントはどれも一つの状態でしか試していないので詳しいことはわかりませんが、前者はログインしてない状態でも起動していたほうがいいものです。どちらも古いアプリなので、単純にWindows10に対応してないのかもしれません。
回答1件
あなたの回答
tips
プレビュー