5

大規模なプロジェクトでは、ユーザーが指定したさまざまなことを実行するC#プログラムを作成します。ユーザーインターフェイスは、システムアイコンからアクセスでき、画面にロゴを表示します。

今日の多くの一般的なウイルス対策/マルウェアプログラムのように、プログラムを起動時に実行し、シャットダウンするまでバックグラウンドで実行したいと思います。

また、実行するためにプログラムをインストールしたいと思います。

ここにはたくさんあることを知っています。起動時にプログラムを実行する方法(起動フォルダー)は知っていますが、AntiVirusと同様に、起動フォルダーだけでなく、常にそこに配置したいと思っています...

もともとはサービスだと思っていたのですが、今はよくわからないので、頭がおかしくなってしまいます。これを行うための最良の方法は何ですか?GUIは必須です。

すべての回答、ヒント、提案をいただければ幸いです。

前もって感謝します。

4

2 に答える 2

10

ウイルス対策プログラムおよび同様のシステムトレイアプリケーションには、2つのコンポーネントが含まれる場合があります。システムで開始するサービスと、ユーザーがデスクトップにログインしたときにサーバーと対話してサービス機能へのユーザーアクセスを提供する別のシステムトレイアプリケーションがスタートアップフォルダーにあります。答える必要のある質問の1つは、誰もログインしていないときに何かを実行するかどうかです。実行する場合は、サービスコンポーネントが必要になります。そうでない場合は、システムトレイアイコンを作成する1つのアプリケーションにすべてを配置できます。.NETアプリケーションからシステムトレイにアイコンを配置するには、http://www.developer.com/net/net/article.php/3336751/C-Tip-Placing-Your-C-Application-in-を参照してください。 the-System-Tray.htm

正しく理解/思い出せば、システムトレイにアイコンを配置するために設計された.NETコンポーネントがあります。

于 2012-10-21T15:17:27.287 に答える
1

これが私が上で述べたサンプルです。

このコードはTaskbarUtilityにあり、アプリケーション全体のすべてのイベントがここから新しいフォームを作成します。

これがこのようなことを行うための「正しい」方法であるかどうかはわかりません。スレッドジャックをするつもりはありませんが、共有したほうがよいと思いました。:)

    List<CommonFormBase> activeWindows = new List<CommonFormBase>();

    public void LaunchApplication(ApplicationWindowType formTypeToLaunch)
    {
        CommonFormBase tempForm;
        switch (formTypeToLaunch)
        {
            //implement code to create a new form here
        }

        activeWindows.Add(tempForm);
        tempForm.Name = "UniqueName:" + System.DateTime.Now;
        tempForm.FormClosed += new FormClosedEventHandler(tempForm_FormClosed);
        tempForm.Show();
    }

    void tempForm_FormClosed(object sender, FormClosedEventArgs e)
    {
        if (sender is CommonFormBase)
        {
            //Get the index of the selected form
            int index = -1;
            for (int i = 0; i <= this.activeWindows.Count - 1; i++)
            {
                if (this.activeWindows[i].Name == ((Form)sender).Name)
                    index = i;
            }

            //Remove the selected form from the list
            if (index >= 0)
                activeWindows.RemoveAt(index);

            //Close the TaskbarUtility if no remaining windows
            //  and user choose to exit when none remain
            if (this.activeWindows.Count == 0 && CloseWhenNoWindowsRemain)
            {
                this.Close();
            }
        }
    }

それが理にかなっていることを願っています。

すべてのユーザーがアプリを常に実行することを望んでいるわけではないため、オプションを有効にするとプログラム全体が閉じます。

于 2012-10-22T00:41:34.387 に答える