对于一个大型项目,我将制作一个C#程序,它可以执行用户指定的各种操作,有一个用户界面,可以从系统图标访问,并且屏幕上始终显示徽标。
我希望程序在启动时运行并在后台运行直到关闭,例如今天许多常见的防病毒/恶意软件程序。
我还希望安装程序才能运行。
我知道这里有很多。我知道如何让程序在启动时运行(启动文件夹),但与AntiVirus一样,我希望它始终存在,而不仅仅是在启动文件夹中......
我原本以为这是一项服务,但我现在不太确定,而且我正在做一场噩梦。做这个的最好方式是什么 ? GUI是必须的。
将会感谢所有答案,提示和建议。
提前致谢。
答案 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();
}
}
}
希望这是有道理的。
假设并非所有用户都希望应用程序一直运行,因此这将在启用该选项时关闭整个程序。