2013-08-09 5 views
4

У меня есть приложение в .net, где я хочу, чтобы он всегда открывался без какого-либо ручного взаимодействия.Приложение автозапуска и откройте его на панели задач с иконкой в ​​лотке

В этом приложении я использовал NotifyIcon, поэтому он всегда запускается в лотке панели задач, но значок уведомления будет отображаться только в том случае, если я вручную открою его .exe.

так, что я просто добавили его в записи реестра приложений Автозапуск с помощью ниже:

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

Так что это прекрасно работает и после перезагрузки он успешно открыть его в систему панели задач список процессов, а не как значок панели задач.

Может ли кто-нибудь мне помочь?

ответ

0

Существовал проблема с тем, как я использовал значок.

Там может быть проблема с файлом «значок» мы используем в NotifyIcon, так что я просто фиксированной этот вопрос просто заменив путь

// 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()); 

Теперь я могу увидеть Красную значок даже после перезагрузки моего компьютер.

3

Я тоже работаю с NotifyIcon, и есть некоторые проблемы с этим. Во-первых, вам нужно установить значок для NotifyIcon и быть уверенным, что вы не задали его видимость ничем, кроме Visibility.Visible.

Затем NotifyIcon - это всего лишь оболочка API-интерфейса NotifyIcon, и есть известная проблема, которую она не всегда может быть создана. Поэтому, когда вы инициализируете NotifyIcon , он может выдать исключение из-за ошибки в Windows (WinApi возвращает false, если он не может быть создан, а в исходном коде они выбрасывают там исключение). Когда это произойдет, вы можете просто воссоздать NotifyIcon в цикле, пока он не будет создан.

Я также видел проблему когда-то, когда NotifyIcon не был создан в app.xaml как объект XAML, а в коде, так как тогда я всегда создаю его в XAML, а не в коде. Также теперь я импортировал whole NotifyIcon project from CodeProject, чтобы иметь возможность отлаживать его интерьер. Так что теперь я создаю его таким образом:

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

Это должно выбросить исключение, если значок не может быть создано в этой части кода в библиотеке 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; 
    } 
    } 
} 

Либо напрямую отредактируйте код в соответствии с вашими потребностями или попробуйте воссоздать notifyicon, когда есть Исключение.

Я думаю, это будет проблемой, потому что это было то же самое для нас, поскольку иногда после запуска Windows еще не готова к созданию значка. Если у вас есть еще одна проблема, отправьте код, который вы используете для создания notifyicon и системы (XP? 64bit?), На которой возникает проблема.