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

问题描述:

我的应用程序工作正常,它会在启动之前执行。 我添加了一个通知图标,并在我的代码中,有一些地方,这个图标changes.I添加我的应用程序的根文件夹中的所有必需的图标,并且除了我的应用程序的启动启动,除了图标,一切工作正常。 我可以在注册表的“运行”部分中看到我的应用程序的地址(我的意思是,每个应用程序都与我的应用程序在启动时正确启动时相同)。但是,我的应用程序不再在启动时运行。 对我的问题有什么建议? PS:我想我应该解释一下我的工作一点点,我写了一个小片应用程序具有完全相同的问题应用程序不会在启动后启动后添加notifyicon

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++; 

正如你所看到的,应用程序改变的NotifyIcon的图标,每一个节拍使用此代码,该应用程序不会在启动时运行。但如果我删除应用程序的图标更改功能,它将在启动时实际运行

这需要心理调试,我猜测您正在加载这些图标使用它们的相对的路径名称。像新图标(“foo.ico”)。

如果您的程序的默认工作目录设置在您希望的位置,这只能正常工作。它通常是,当你从Visual Studio启动你的程序或从桌面快捷方式启动它。但是,当您将其添加到运行注册表项时,不是。 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); 

但肯定有比存储图标为文件提供更好的方法,你可以在你的程序中嵌入它们。项目+属性,资源选项卡。单击添加资源按钮上的箭头,添加现有文件并导航到.ico文件。现在,图标嵌入到您的程序中,您将永远不会失去它的踪迹,并且当您在另一台机器上部署程序时不会忘记复制它。代码也更简单:

var icon = Properties.Resources.foo; 
+0

好的,我的猜测是正确的。请始终包含代码段,以便我们不必进行这种猜测,并且在更改问题后不必更改答案。 – 2013-02-28 15:02:30

+0

非常感谢你。对不起,如果我迟到了一个示例code.this有趣的是,默认工作目录并不总是我的应用程序存在的文件夹。你会解释更多关于这个主题(或者可能链接到某个地方我可以阅读它)。因为我没有完全明白为什么会发生这种情况,但再次感谢您的解决方案。 – roostaamir 2013-02-28 16:34:49

+0

我很确定这是没有记录在任何地方。进程的工作目录*预计*位于任意位置。这就是为什么有一个ProcessStartInfo.WorkingDirectory属性。您可以在桌面快捷方式中更改它。它只是偶然匹配EXE目录。然而一个常见的事故。 – 2013-02-28 21:58:30