2

我的应用程序运行正常,之前它会在启动时执行。我添加了一个通知图标,在我的代码中,这个图标在某些地方发生了变化。我在我的应用程序的根文件夹中添加了所有必需的图标,除了我的应用程序的启动启动之外,这些图标一切正常。我可以在注册表的“运行”部分看到我的应用程序的地址(我的意思是一切都与我的应用程序在启动时正确启动时相同)。但我的应用程序将不再在启动时运行。对我的事情有什么建议吗?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++;

如您所见,该应用程序在每次滴答时都会更改通知图标的图标。使用此代码,该应用程序将不会在启动时运行。但是如果我删除该应用程序的图标更改功能,它实际上会在启动时运行

4

1 回答 1

2

这需要心理调试,我猜您正在使用它们的相对路径名加载这些图标。像新图标(“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;
于 2013-02-28T15:00:41.117 回答