2013-08-09 2 views
4

J'ai une application dans .net où je veux qu'elle s'ouvre toujours sans aucune interaction manuelle.Application de démarrage automatique et l'ouvrir dans la barre des tâches avec l'icône de la barre des tâches

Dans cette application, j'ai utilisé NotifyIcon afin qu'il démarre toujours dans la barre des tâches, mais l'icône de notification ne s'affiche que si j'ouvre manuellement .exe.

donc ce que je n'est simplement ajouté dans l'entrée de registre des applications Autostart avec l'aide de ci-dessous:

RegistryKey rkApp = Registry.CurrentUser.OpenSubKey("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", true); 
rkApp.SetValue("MyApp", Application.ExecutablePath.ToString()); 

donc ceci fonctionne très bien et au redémarrage ouvert avec succès dans la barre des tâches du système Liste des processus mais pas comme icône de la barre des tâches.

Quelqu'un peut-il m'aider?

Répondre

0

Un problème est survenu lors de l'utilisation de l'icône.

Il pourrait y avoir un problème avec le fichier « icône » que nous utilisons dans NotifyIcon donc je vient de fixer cette question simplement en remplaçant le chemin

// START: Creating a red graphic instead of image 
Bitmap b = new Bitmap(16, 16); 

Graphics g = Graphics.FromImage(b); 
g.Clear(Color.Transparent); 
SolidBrush sb = new SolidBrush(Color.Red); 
g.FillEllipse(sb, 0, 0, 16, 16); 
// END: Creating a red graphic instead of image 

m_notifyicon.Visible = true; 
m_notifyicon.Icon = Icon.FromHandle(b.GetHicon()); 

Maintenant, je suis en mesure de voir l'icône rouge même après le redémarrage de mon ordinateur.

3

Je travaille avec NotifyIcon aussi, et il y a quelques problèmes avec cela. Tout d'abord, vous devez définir une icône pour NotifyIcon et assurez-vous que vous n'avez pas défini sa visibilité sur autre chose que Visibility.Visible.

Ensuite, NotifyIcon est juste un wrapper autour de l'API NotifyIcon Windows et il y a un problème connu qu'il ne peut pas toujours être créé. Par conséquent, lorsque vous initialisez le NotifyIcon il peut lancer une exception en raison d'une erreur dans Windows (le WinApi renvoie false s'il n'a pas pu être créé et dans le code source, il y a une exception). Quand il le fait, vous pouvez simplement recréer le NotifyIcon dans une boucle jusqu'à ce qu'il puisse être créé.

J'ai également vu un problème à un moment où le NotifyIcon n'a pas été créé dans le app.xaml en tant qu'objet XAML mais en code, depuis que je le crée toujours en XAML au lieu du code. Aussi maintenant j'ai importé le whole NotifyIcon project from CodeProject pour être capable de déboguer son intérieur. Alors maintenant, je crée de cette façon:

 <NotifyIcon1:NotifyIcon x:Key="NotifyIcon" x:Name="notifyicon" 
         ToolTipText="" Visibility="Visible" IconSource="/Images/Icons/bulb.ico"/> 

Cela devrait lancer une exception si l'icône ne peut être créé dans cette partie du code dans la bibliothèque NotifyIcon:

/// <summary> 
/// Creates the taskbar icon. This message is invoked during initialization, 
/// if the taskbar is restarted, and whenever the icon is displayed. 
/// </summary> 
private void CreateTaskbarIcon() 
{ 
    lock (this) 
    { 
    if (!IsTaskbarIconCreated) 
    { 
     const IconDataMembers members = IconDataMembers.Message 
             | IconDataMembers.Icon 
             | IconDataMembers.Tip; 

     //write initial configuration 
     var status = Util.WriteIconData(ref iconData, NotifyCommand.Add, members); 
     if (!status) 
     { 
     throw new Win32Exception("Could not create icon data"); 
     } 

     //set to most recent version 
     SetVersion(); 
     messageSink.Version = (NotifyIconVersion) iconData.VersionOrTimeout; 

     IsTaskbarIconCreated = true; 
    } 
    } 
} 

Soit vous directement modifiez le code selon vos besoins ou essayez de recréer l'notifyicon en cas d'exception.

Je suppose que ce sera le problème parce qu'il était le même pour nous, parfois après le démarrage de Windows n'est pas encore prêt à créer l'icône. S'il y a un autre problème pour vous, veuillez poster le code que vous utilisez pour créer l'notifyicon et le système (XP? 64bit?) Sur lequel le problème se pose.

Questions connexes