2

基本的に、システムの起動からシステムのシャットダウンまでアプリケーションを実行する必要があります。私は次のアプローチを考え出しました。

  1. MyApp.exeとMyService.exeを作成します
  2. MyAppはMyServiceをサービスとしてインストールする必要があります
  3. MyServiceは起動時に実行され、MyAppが実行されているかどうかを定期的にチェックすることになっています。それがそれを開始するよりもそうでない場合。

これが私のサービス用に書いたコードです。

protected override void OnStart(string[] args)
{
    while(true)
    {
        int processesCount =
            Process.GetProcessesByName(Settings.Default.MyAppName).Count() +
            Process.GetProcessesByName(Settings.Default.MyAppName + ".vshost").Count() +
            Process.GetProcessesByName(Settings.Default.MyAppUpdaterName).Count();

        if(processesCount==0)
        {
            //restore
            var p = new Process { StartInfo = { FileName = Settings.Default.MyAppName, Arguments = "" } };
            p.Start();
        }
        else
        {
        }

        System.Threading.Thread.Sleep(3000);
    }
}
  1. このプロセスをインストールして、Windows Startで開始するにはどうすればよいですか?
  2. OnStartメソッドのこの無限ループが良いアイデアかどうかはわかりません。それは...ですか?
  3. 一般的な考え方は大丈夫ですか?
4

2 に答える 2

2

私がやったことは、ロジックとメインアプリケーションコードを実行するWindowsサービスを持っていることです。次に、GUIが必要な場合は、WindowsサービスでWCFを介してWebサービスを公開し、Webサービスを呼び出すWindowsアプリを作成します。インストール時に、WindowsスタートアップにWindowsアプリを配置します。

このモデルでは、メインアプリケーションコードが常に実行されますが、GUIは、ユーザーがログインしている場合にのみ起動します。

于 2012-10-20T00:19:54.173 に答える
1

一般的な考え方は大丈夫ですか?

ハンスがコメントで指摘しているように、これはユーザーにとって敵対的であり、サービスは独自のWindowsステーションで実行されるため、幸いなことにVista以降では機能しません。常に実行する必要のあるロジックをサービスに配置し、WCFなどのIPCメカニズムを使用して(オプションで)実行中のUIと通信します。ユーザーがサービスを無効にするか、GUIを終了する場合は、ユーザーの希望を尊重してください...

このプロセスをインストールして、Windows Startで開始するにはどうすればよいですか?

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\RunGUIアプリケーションに、またはHKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\RunGUIアプリケーションを指すエントリを追加します。

OnStartメソッドのこの無限ループが良いアイデアかどうかはわかりません。それは...ですか?

いいえOnStart。OnStartが戻った後に作業を行う必要がある場合は、その作業を行うためのスレッドを作成してから戻る必要があります。

于 2012-10-20T00:28:43.483 に答える