2

ClickOnce を介してネットワーク共有にデプロイされたアプリケーションがあります。インストールモードをオンラインのみに設定しています。アプリケーションはシステム トレイで実行されます。Windows 7 では、プログラムが最初に実行されると、拡張システム トレイ (項目に到達するために最初に矢印をクリックする必要がある場所) に表示されます。問題は、ユーザーがアプリケーションをメイン トレイに表示するように設定すると、更新を公開すると設定が失われることです。次に、私のアプリケーションが設定に2回表示されます(1回目はメイントレイに表示するように設定されている古いバージョンで、もう1つはメイントレイに表示するように設定されていない新しいバージョンです。どうすれば入手できますか)設定を 1 回設定するだけで表示されるようにするにはどうすればよいですか?

ここにも同様の質問があります: http://social.msdn.microsoft.com/Forums/en-US/winformssetup/thread/c33ab558-7fd5-4330-a985-9702358472d0/

4

2 に答える 2

2

これは実際に行うことができます(つまり、更新中にClickOnceが実行可能ファイルのパスを変更した場合でも、Windows 7に通知アイコンを同じものとして認識させることができます)。それは非常に厄介であり、以下の基準のすべてが厳密な精度で満たされている必要があります。

  • 開発マシンでGUIDを生成し、Shell_NotifyIconを呼び出すたびにそのGUIDにguidItemメンバーを設定します。アプリのリリースバージョン間でも、常に同じGUIDである必要があります(ここでのポイントです)。
  • Shell_NotifyIconを呼び出すたびにNIF_GUIDフラグを設定します。
  • ターゲットマシン(つまり、実際のマシン)で信頼されるAuthenticode証明書を使用してアセンブリにデジタル署名します。

パスに関係なく設定が保存されていない場合-または-Shell_NotifyIconがfalseをスローし始めます。これは、次のいずれかを意味します。

  • 構造体のguidItemメンバーを適切に設定していない、またはNIF_GUIDフラグを設定していない、コード内のどこかでShell_NotifyIconを少なくとも1回呼び出しています。
  • 実行可能なバイナリに実際に署名していません。Visual Studioを使用してこれを行う場合、構成の問題が原因で署名が失敗したときに通知しないのは非常に悪いことです。Windowsエクスプローラーでファイルのプロパティを確認し、署名証明書を表示するタブが表示されることを確認します。
  • 証明書はターゲットマシンで信頼されていません。

ある時点で混乱し、Shell_NotifyIconがfalseを返し始め、停止していないように見える場合は、新しいGUIDを生成して、プロセスを最初からやり直してください。

また、注:GUIDを使用した通知アイコンに関して何かをしようとするときは、OSのバージョンをチェックしてWindows7以降を使用していることを確認してください。WindowsVista以下はおかしくなります。

例:

var os = Environment.OSVersion.Version;
if (os.Major > 6 || (os.Major == 6 && os.Minor >= 6))
{
    lpData.guidItem = Guid.Parse("Your Own Guid Here");
    lpData.uFlags |= FlagEnum.NIF_GUID;
}
于 2012-09-15T10:11:43.660 に答える
0

以前は、アプリケーションの通知アイコンがありました。私たちの問題は、ユーザーがすべての通知を常に表示するように設定しない限り、表示されないことでした。ユーザーがアプリをしばらく実行せずに実行した場合、ユーザーがアプリを数回使用するまでアプリは表示されなくなります。

これを回避する方法がわかりません。私たちはこの理由といくつかのビジネス上の理由でそれを取り出すことになりました。

于 2011-03-29T06:56:41.250 に答える