.NET Make C#Program在后台和启动时运行,如Anti Virus

时间:2012-10-21 15:09:55

标签: c# .net windows startup

对于一个大型项目,我将制作一个C#程序,它可以执行用户指定的各种操作,有一个用户界面,可以从系统图标访问,并且屏幕上始终显示徽标。

我希望程序在启动时运行并在后台运行直到关闭,例如今天许多常见的防病毒/恶意软件程序。

我还希望安装程序才能运行。

我知道这里有很多。我知道如何让程序在启动时运行(启动文件夹),但与AntiVirus一样,我希望它始终存在,而不仅仅是在启动文件夹中......

我原本以为这是一项服务,但我现在不太确定,而且我正在做一场噩梦。做这个的最好方式是什么 ? GUI是必须的。

将会感谢所有答案,提示和建议。

提前致谢。

2 个答案:

答案 0 :(得分:10)

防病毒程序和类似系统托盘应用程序有时或通常有2个组件。有一个以系统开头的服务,以及启动文件夹中的一个单独的系统托盘应用程序,当用户登录到桌面时,该应用程序与服务器交互以提供用户对服务功能的访问权限。您必须回答的一个问题是,当您没有人登录时是否需要运行任何内容。如果是这样,您将需要一个服务组件。如果没有,您可以将所有内容放在一个创建系统托盘图标的应用程序中。要从.NET应用程序中将图标放入系统托盘,请参阅http://www.developer.com/net/net/article.php/3336751/C-Tip-Placing-Your-C-Application-in-the-System-Tray.htm

如果我理解/回想正确,可以使用.NET组件将图标放入系统托盘。

答案 1 :(得分: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();
            }
        }
    }

希望这是有道理的。

假设并非所有用户都希望应用程序一直运行,因此这将在启用该选项时关闭整个程序。