添加notifyicon后,应用程序不会在启动时启动

时间:2013-02-28 13:56:09

标签: c# startup notifyicon

我的应用程序正常运行,之前会在启动时执行。 我添加了一个通知图标,在我的代码中,有一些地方这个图标发生了变化。我在我的应用程序的根文件夹中添加了所有必需的图标,除了我的应用程序的启动启动之外,一切都正常。 我可以在注册表的“运行”部分看到我的应用程序地址(我的意思是一切都与我的应用程序在启动时正确启动时相同)。但我的应用程序将不再在启动时运行。 关于我的事情的任何建议? PS:我想我应该稍微解释一下我的工作,然后我写了一小段具有完全相同问题的应用程序

    public Icon[] icons = new Icon[2] { new Icon("icon1.ico"), new Icon("icon2.ico") };
    public int counter = 0;


    private void button1_Click(object sender, EventArgs e)
    {
        notifyIcon1.Visible = true;
        timer1.Start();

    }

    private void timer1_Tick(object sender, EventArgs e)
    {
        counter %= 2;
        notifyIcon1.Icon = icons[counter];
        counter++;

正如您所看到的,应用程序会在每个tick中更改notifyicon的图标。使用此代码,应用程序将无法在启动时运行。但如果我删除应用程序的图标更改功能,它将实际在启动时运行

1 个答案:

答案 0 :(得分:2)

这需要通过心灵调试,我猜你正在使用他们的相对路径名加载这些图标。像新图标(" foo.ico")。

只有在程序的默认工作目录设置在您希望的位置时,才能正常工作。通常,当您从Visual Studio启动程序或从桌面快捷方式启动它时。但是当您将其添加到Run注册表项时,。 Environment.CurrentDirectory将在其他地方设置,通常是Windows目录。

您必须始终使用文件的完整路径名。获得这条道路的简单方法是:

    var home = System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetEntryAssembly().Location);
    var path = System.IO.Path.Combine(home, "foo.ico");
    var icon = new Icon(path);

但是,将图标存储为文件肯定是一种更好的方法,您可以将它们嵌入到您的程序中。 Project + Properties,Resources选项卡。单击“添加资源”按钮,“添加现有文件”上的箭头,然后导航到.ico文件。现在,图标已嵌入到您的程序中,您永远不会忘记它,并且在将程序部署到另一台计算机上时不会忘记复制它。而且代码也更简单:

    var icon = Properties.Resources.foo;