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

これには精神的なデバッグが必要です。相対パス名を使用してこれらのアイコンをロードしていると思います。new Icon("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);

しかし、アイコンをファイルとして保存するよりも確実に良い方法があります。アイコンをプログラムに埋め込むことができます。プロジェクト + プロパティ、リソース タブ。[リソースの追加] ボタンの矢印をクリックし、[既存のファイルを追加] をクリックして、.ico ファイルに移動します。これでアイコンがプログラムに埋め込まれ、見失うことがなくなり、プログラムを別のマシンに展開するときにアイコンをコピーするのを忘れることもなくなりました。また、コードも単純です。

    var icon = Properties.Resources.foo;
于 2013-02-28T15:00:41.117 に答える