Shell notifyicon error 1008

Hi

Hi

I’m writing an app that runs in the background and would like to add an icon to the notification area to allow the user to interact with it occasionally. The app currently works fine on my desktop development machine, but I’m also developing on another latop
machine as well, and I’ve noticed the call the Shell_NotifyIcon with NIM_ADD
always fails, and GetLastError returns 1008: ERROR_NO_TOKEN. Both machines are running Windows 7 SP1

Problems with this function are well documented:

http://social.msdn.microsoft.com/Forums/zh/vcgeneral/thread/003ca6a1-e993-41a9-a3d5-d6219664889f

http://msdn.microsoft.com/en-us/library/bb762159%28v=vs.85%29.aspx

http://connect.microsoft.com/VisualStudio/feedback/details/296872/shell-notifyicon-fails-at-times-for-no-reason

However the problem seems to centre around a timeout during startup. My application is failing whilst debugging, the machine is otherwise completely idle.

What is the likely cause of this? I can’t find any information about the error code itself, at least nothing relevant to Shell_NotifyIcon. I’m following what I think are the best practices for each targeted OS regarding the lpdata parameter, these values
are set as follows:

	// Initialize NOTIFYICONDATA
	ZeroMemory(&m_nid, sizeof(NOTIFYICONDATA));

	// Get Shell32 version number and set the size of the structure.
	// http://msdn.microsoft.com/en-us/library/bb773352%28v=vs.85%29.aspx
	ULONGLONG version = GetDllVersion(_T("Shell32.dll"));

	if(version >= MAKEDLLVERULL(6,0,6,0))
	{
		m_nid.cbSize = sizeof(NOTIFYICONDATA);
		m_nid.uVersion = NOTIFYICON_VERSION_4;
	}
	else if(version >= MAKEDLLVERULL(6,0,0,0))
	{
		m_nid.cbSize = NOTIFYICONDATA_V3_SIZE;
		m_nid.uVersion = NOTIFYICON_VERSION_4;
	}
	else if(version >= MAKEDLLVERULL(5,0,0,0))
	{
		m_nid.cbSize = NOTIFYICONDATA_V2_SIZE;
		m_nid.uVersion = NOTIFYICON_VERSION;
	}
	else
	{
		m_nid.cbSize = NOTIFYICONDATA_V1_SIZE;
		m_nid.uVersion = 0;
	}

	m_nid.uFlags = NIF_ICON | NIF_TIP | NIF_MESSAGE | NIF_SHOWTIP;

	// Only Windows 7 systems or later may use a GUID to identify the notification icon.
	if (IsWin7OrLater())
	{
		m_nid.uFlags |= NIF_GUID;
		m_nid.guidItem = NOTIFICATION_ICON_GUID;
	}
	else
		m_nid.uID = NOTIFICATION_ICON_ID;

	// Set tray notification window:
	m_nid.hWnd = m_hWnd;
	m_nid.uCallbackMessage = UM_TRAYNOTIFY;

	// Set tray icon and tooltip:
	m_nid.hIcon = theApp.LoadIcon(IDR_MAINFRAME);

	// Tooltip to be shown when mouse is over the icon. The NIF_TIP flag must be set , but on vista 
	CString strToolTip = _T("Scheduler");
	_tcsncpy_s(m_nid.szTip, strToolTip, strToolTip.GetLength());

	// If the application was not shut down properly the icon may still be present,
	// but attached to a now invalid hWnd. Remove it before re-adding.
	Shell_NotifyIcon(NIM_DELETE, &m_nid);

	//Add the icon.
	bResult = Shell_NotifyIcon(NIM_ADD, &m_nid);
	DWORD dw = GetLastError();
	
	// Specify the behaviour of the icon.
	bResult = Shell_NotifyIcon(NIM_SETVERSION, &m_nid);

Regards, Andrew

  • Edited by

    Tuesday, March 27, 2012 12:14 PM
    Removed unnecessary code

  • Moved by
    Mike Dos Zhang
    Wednesday, March 28, 2012 3:21 PM
    Shell API question (From:General Windows Desktop Development Issues)

Содержание

  1. Shell notifyicon error 1008
  2. Answered by:
  3. Question
  4. Answers
  5. All replies
  6. Shell notifyicon error 1008
  7. Answered by:
  8. Question
  9. Answers
  10. Shell notifyicon error 1008
  11. Answered by:
  12. Question
  13. Answers
  14. All replies
  15. Thread: Question about Shell_NotifyIcon function — error 1008
  16. Question about Shell_NotifyIcon function — error 1008
  17. Posting Permissions
  18. Shell notifyicon error 1008
  19. Answered by:
  20. Question
  21. Answers
  22. All replies

Shell notifyicon error 1008

This forum has migrated to Microsoft Q&A. Visit Microsoft Q&A to post new questions.

Answered by:

Question

I’m writing an app that runs in the background and would like to add an icon to the notification area to allow the user to interact with it occasionally. The app currently works fine on my desktop development machine, but I’m also developing on another latop machine as well, and I’ve noticed the call the Shell_NotifyIcon with NIM_ADD always fails, and GetLastError returns 1008: ERROR_NO_TOKEN. Both machines are running Windows 7 SP1

Problems with this function are well documented:

However the problem seems to centre around a timeout during startup. My application is failing whilst debugging, the machine is otherwise completely idle.

What is the likely cause of this? I can’t find any information about the error code itself, at least nothing relevant to Shell_NotifyIcon. I’m following what I think are the best practices for each targeted OS regarding the lpdata parameter, these values are set as follows:

Answers

This UI dev forum will show you more expert helps on Shell APIs programming problem.

Mike Zhang[MSFT]
MSDN Community Support | Feedback to us

Shell_NotifyIcon is not documented to set last error, so you can’t rely on GetLastError() to return useful information. The ERROR_NO_TOKEN result may not be related to the Shell_NotifyIcon call and may not even refer to a real error. GetLastError() is only valid if called immediately after a function documented to set it returns failure. Calling it after a success or for a function (like Shell_NotifyIcon) which doesn’t explicitly set it may return a stale value or a value set in case of error which isn’t cleared.

As you mention, the common failures for Shell_NotifyIcon are when the communication with Explorer times out or occurs before Explorer is listening. As mentioned in the comments for Shell_NotifyIcon, in the timeout case GetLastError will usually return ERROR_TIMEOUT (a stale error code inherited from the internal SendMessageTimeout call). Since you aren’t getting that your error probably occurs earlier.

You mention that this occurs when debugging on your laptop: does it only occur when debugging or does it occur always? Is there anything different about the debugging environment on the two systems? Are you running the debugger elevated on one but not the other? If ERROR_NO_TOKEN is relevant it sounds like something related to security tokens: is your app doing any impersonation here?

Have you tried debugging into the call to Shell_NotifyIcon? It’s a fairly simple call, and if you can step through and find which internal function fails it may suggest a solution. You can get Windows symbols from the Microsoft Symbol Server. If you’re using VS 2010 then there is a checkbox to do this automatically on the Debugging Symbols property page. Otherwise see Using the Microsoft Symbol Server

Источник

Shell notifyicon error 1008

This forum has migrated to Microsoft Q&A. Visit Microsoft Q&A to post new questions.

Answered by:

Question

Hello again. I have a question regarding Shell_NotifyIcon work.

Here is my code:

When my app is running in debug mode, Shell_NotifyIcon returns TRUE, but when I run my app in release mode, Shell_NotifyIcon fails with with strange Error: 1008 («An attempt was made to reference a token that does not exist»). What I’m doing wrong?

Using VS2008 & Windows 7

Answers

On 3/24/2013 7:43 AM, Volodymyr Kukharskiy wrote:

When my app is running in debug mode, Shell_NotifyIcon returns TRUE, but when I run my app in release mode, Shell_NotifyIcon fails with with strange Error: 1008 («An attempt was made to reference a token that does not exist»). What I’m doing wrong?

Use different GUIDs for debug and release builds. Apparently, Windows 7 remembers where the icon came from (meaning, the path to the executable and resource ID), in order to show it later in Notification Area Icons control panel applet (the one where you choose which icons to show and which to hide). It then complains when a different executable uses the same GUID. Debug succeeds and Release fails for the simple reason that Debug ran first.

Источник

Shell notifyicon error 1008

This forum has migrated to Microsoft Q&A. Visit Microsoft Q&A to post new questions.

Answered by:

Question

I’m writing an app that runs in the background and would like to add an icon to the notification area to allow the user to interact with it occasionally. The app currently works fine on my desktop development machine, but I’m also developing on another latop machine as well, and I’ve noticed the call the Shell_NotifyIcon with NIM_ADD always fails, and GetLastError returns 1008: ERROR_NO_TOKEN. Both machines are running Windows 7 SP1

Problems with this function are well documented:

However the problem seems to centre around a timeout during startup. My application is failing whilst debugging, the machine is otherwise completely idle.

What is the likely cause of this? I can’t find any information about the error code itself, at least nothing relevant to Shell_NotifyIcon. I’m following what I think are the best practices for each targeted OS regarding the lpdata parameter, these values are set as follows:

Answers

This UI dev forum will show you more expert helps on Shell APIs programming problem.

Mike Zhang[MSFT]
MSDN Community Support | Feedback to us

Shell_NotifyIcon is not documented to set last error, so you can’t rely on GetLastError() to return useful information. The ERROR_NO_TOKEN result may not be related to the Shell_NotifyIcon call and may not even refer to a real error. GetLastError() is only valid if called immediately after a function documented to set it returns failure. Calling it after a success or for a function (like Shell_NotifyIcon) which doesn’t explicitly set it may return a stale value or a value set in case of error which isn’t cleared.

As you mention, the common failures for Shell_NotifyIcon are when the communication with Explorer times out or occurs before Explorer is listening. As mentioned in the comments for Shell_NotifyIcon, in the timeout case GetLastError will usually return ERROR_TIMEOUT (a stale error code inherited from the internal SendMessageTimeout call). Since you aren’t getting that your error probably occurs earlier.

You mention that this occurs when debugging on your laptop: does it only occur when debugging or does it occur always? Is there anything different about the debugging environment on the two systems? Are you running the debugger elevated on one but not the other? If ERROR_NO_TOKEN is relevant it sounds like something related to security tokens: is your app doing any impersonation here?

Have you tried debugging into the call to Shell_NotifyIcon? It’s a fairly simple call, and if you can step through and find which internal function fails it may suggest a solution. You can get Windows symbols from the Microsoft Symbol Server. If you’re using VS 2010 then there is a checkbox to do this automatically on the Debugging Symbols property page. Otherwise see Using the Microsoft Symbol Server

Источник

Thread: Question about Shell_NotifyIcon function — error 1008

Thread Tools
Display

Question about Shell_NotifyIcon function — error 1008

When calling the Shell_NotifyIcon function with the NIM_ADD message the function succeeds, but I still get error code 1008 (ERROR_NO_TOKEN).

I did a search on the internet and it appears to have something to do with uID member and icon, but otherwise can’t find anything useful.

Last edited by Peter Swinkels; Dec 9th, 2012 at 11:17 AM .

  • VBForums
  • Visual Basic
  • API
  • Question about Shell_NotifyIcon function — error 1008

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  • BB code is On
  • Smilies are On
  • [IMG] code is On
  • [VIDEO] code is On
  • HTML code is Off

Click Here to Expand Forum to Full Width

Advertiser Disclosure: Some of the products that appear on this site are from companies from which TechnologyAdvice receives compensation. This compensation may impact how and where products appear on this site including, for example, the order in which they appear. TechnologyAdvice does not include all companies or all types of products available in the marketplace.

Источник

Shell notifyicon error 1008

This forum has migrated to Microsoft Q&A. Visit Microsoft Q&A to post new questions.

Answered by:

Question

I’m writing an app that runs in the background and would like to add an icon to the notification area to allow the user to interact with it occasionally. The app currently works fine on my desktop development machine, but I’m also developing on another latop machine as well, and I’ve noticed the call the Shell_NotifyIcon with NIM_ADD always fails, and GetLastError returns 1008: ERROR_NO_TOKEN. Both machines are running Windows 7 SP1

Problems with this function are well documented:

However the problem seems to centre around a timeout during startup. My application is failing whilst debugging, the machine is otherwise completely idle.

What is the likely cause of this? I can’t find any information about the error code itself, at least nothing relevant to Shell_NotifyIcon. I’m following what I think are the best practices for each targeted OS regarding the lpdata parameter, these values are set as follows:

Answers

This UI dev forum will show you more expert helps on Shell APIs programming problem.

Mike Zhang[MSFT]
MSDN Community Support | Feedback to us

Shell_NotifyIcon is not documented to set last error, so you can’t rely on GetLastError() to return useful information. The ERROR_NO_TOKEN result may not be related to the Shell_NotifyIcon call and may not even refer to a real error. GetLastError() is only valid if called immediately after a function documented to set it returns failure. Calling it after a success or for a function (like Shell_NotifyIcon) which doesn’t explicitly set it may return a stale value or a value set in case of error which isn’t cleared.

As you mention, the common failures for Shell_NotifyIcon are when the communication with Explorer times out or occurs before Explorer is listening. As mentioned in the comments for Shell_NotifyIcon, in the timeout case GetLastError will usually return ERROR_TIMEOUT (a stale error code inherited from the internal SendMessageTimeout call). Since you aren’t getting that your error probably occurs earlier.

You mention that this occurs when debugging on your laptop: does it only occur when debugging or does it occur always? Is there anything different about the debugging environment on the two systems? Are you running the debugger elevated on one but not the other? If ERROR_NO_TOKEN is relevant it sounds like something related to security tokens: is your app doing any impersonation here?

Have you tried debugging into the call to Shell_NotifyIcon? It’s a fairly simple call, and if you can step through and find which internal function fails it may suggest a solution. You can get Windows symbols from the Microsoft Symbol Server. If you’re using VS 2010 then there is a checkbox to do this automatically on the Debugging Symbols property page. Otherwise see Using the Microsoft Symbol Server

Источник

Содержание

  1. Shell notifyicon failed focusrite
  2. Shell notifyicon failed focusrite
  3. Answered by:
  4. Question
  5. Answers
  6. All replies
  7. Shell notifyicon failed focusrite
  8. Answered by:
  9. Question
  10. Answers
  11. All replies
  12. Thread: Question about Shell_NotifyIcon function — error 1008
  13. Question about Shell_NotifyIcon function — error 1008
  14. Posting Permissions
  15. Shell notifyicon failed focusrite

Shell notifyicon failed focusrite

Пожалуйста, выделяйте текст программы тегом [сode=pas] . [/сode] . Для этого используйте кнопку [code=pas] в форме ответа или комбобокс, если нужно вставить код на языке, отличном от Дельфи/Паскаля.

Соблюдайте общие правила форума

Следующие вопросы задаются очень часто, подробно разобраны в FAQ и, поэтому, будут безжалостно удаляться:
1. Преобразовать переменную типа String в тип PChar (PAnsiChar)
2. Как «свернуть» программу в трей.
3. Как «скрыться» от Ctrl + Alt + Del (заблокировать их и т.п.)
4. Как запустить программу/файл? (и дождаться ее завершения)
5. Как перехватить API-функции, поставить hook? (перехват сообщений от мыши, клавиатуры — внедрение в удаленное адресное прстранство)
. (продолжение следует) .
Внимание:
Попытки открытия обсуждений реализации вредоносного ПО, включая различные интерпретации спам-ботов, наказывается предупреждением на 30 дней.
Повторная попытка — 60 дней. Последующие попытки — бан.
Мат в разделе — бан на три месяца.
Полезные ссылки:
MSDN Library FAQ раздела Поиск по разделу Как правильно задавать вопросы

Выразить свое отношение к модераторам раздела можно здесь: Rouse_, Krid

Поставил на виртуалку XP все работает выводит Балун на 7’ке ноль эмоций! кто нить сталкивался с подобным?

Handling Shell_NotifyIcon failure

Shell_NotifyIcon will often fail when called during Windows startup (for instance, if your application is listed in HKLMSoftwareMicrosoftWindowsCurrentVersionRun. This appears to be because the system is busy starting applications. The failure is more common on low-spec computers or computers with some brands of antivirus software installed, which seem to be very intensive at startup.

Unfortunately, you cannot rely on the error code returned by GetLastError. When Shell_NotifyIcon returns false, some of the common errors returned by GetLastError are:
ERROR_FILE_NOT_FOUND (2)
ERROR_TIMEOUT (1460)
ERROR_SUCCESS (0)
The most appropriate response to any error returned by Shell_NotifyIcon is to sleep for a period of time and retry.

An explanation of why the error code may differ has been made by Paul Baker, paraphrased from http://groups.google.com/group/microsoft.public.platformsdk.shell/msg/59235b293cbf5dfa and http://groups.google.com/group/microsoft.public.platformsdk.shell/msg/73973287f15c03fc:

Shell_NotifyIcon actually calls SetLastError(0) initially. After that, basically it uses FindWindow to find the tray notification window. If this fails, it will typically return ERROR_FILE_NOT_FOUND. Otherwise it sends a WM_COPYDATA message to the tray notification window, using SendMessageTimeout with a timeout of only 4 seconds. If that message returns zero, then Shell_NotifyIcon will fail with GetLastError returning zero.

Источник

Shell notifyicon failed focusrite

This forum has migrated to Microsoft Q&A. Visit Microsoft Q&A to post new questions.

Answered by:

Question

I’m writing an app that runs in the background and would like to add an icon to the notification area to allow the user to interact with it occasionally. The app currently works fine on my desktop development machine, but I’m also developing on another latop machine as well, and I’ve noticed the call the Shell_NotifyIcon with NIM_ADD always fails, and GetLastError returns 1008: ERROR_NO_TOKEN. Both machines are running Windows 7 SP1

Problems with this function are well documented:

However the problem seems to centre around a timeout during startup. My application is failing whilst debugging, the machine is otherwise completely idle.

What is the likely cause of this? I can’t find any information about the error code itself, at least nothing relevant to Shell_NotifyIcon. I’m following what I think are the best practices for each targeted OS regarding the lpdata parameter, these values are set as follows:

Answers

This UI dev forum will show you more expert helps on Shell APIs programming problem.

Mike Zhang[MSFT]
MSDN Community Support | Feedback to us

Shell_NotifyIcon is not documented to set last error, so you can’t rely on GetLastError() to return useful information. The ERROR_NO_TOKEN result may not be related to the Shell_NotifyIcon call and may not even refer to a real error. GetLastError() is only valid if called immediately after a function documented to set it returns failure. Calling it after a success or for a function (like Shell_NotifyIcon) which doesn’t explicitly set it may return a stale value or a value set in case of error which isn’t cleared.

As you mention, the common failures for Shell_NotifyIcon are when the communication with Explorer times out or occurs before Explorer is listening. As mentioned in the comments for Shell_NotifyIcon, in the timeout case GetLastError will usually return ERROR_TIMEOUT (a stale error code inherited from the internal SendMessageTimeout call). Since you aren’t getting that your error probably occurs earlier.

You mention that this occurs when debugging on your laptop: does it only occur when debugging or does it occur always? Is there anything different about the debugging environment on the two systems? Are you running the debugger elevated on one but not the other? If ERROR_NO_TOKEN is relevant it sounds like something related to security tokens: is your app doing any impersonation here?

Have you tried debugging into the call to Shell_NotifyIcon? It’s a fairly simple call, and if you can step through and find which internal function fails it may suggest a solution. You can get Windows symbols from the Microsoft Symbol Server. If you’re using VS 2010 then there is a checkbox to do this automatically on the Debugging Symbols property page. Otherwise see Using the Microsoft Symbol Server

Источник

Shell notifyicon failed focusrite

This forum has migrated to Microsoft Q&A. Visit Microsoft Q&A to post new questions.

Answered by:

Question

I’m writing an app that runs in the background and would like to add an icon to the notification area to allow the user to interact with it occasionally. The app currently works fine on my desktop development machine, but I’m also developing on another latop machine as well, and I’ve noticed the call the Shell_NotifyIcon with NIM_ADD always fails, and GetLastError returns 1008: ERROR_NO_TOKEN. Both machines are running Windows 7 SP1

Problems with this function are well documented:

However the problem seems to centre around a timeout during startup. My application is failing whilst debugging, the machine is otherwise completely idle.

What is the likely cause of this? I can’t find any information about the error code itself, at least nothing relevant to Shell_NotifyIcon. I’m following what I think are the best practices for each targeted OS regarding the lpdata parameter, these values are set as follows:

Answers

This UI dev forum will show you more expert helps on Shell APIs programming problem.

Mike Zhang[MSFT]
MSDN Community Support | Feedback to us

Shell_NotifyIcon is not documented to set last error, so you can’t rely on GetLastError() to return useful information. The ERROR_NO_TOKEN result may not be related to the Shell_NotifyIcon call and may not even refer to a real error. GetLastError() is only valid if called immediately after a function documented to set it returns failure. Calling it after a success or for a function (like Shell_NotifyIcon) which doesn’t explicitly set it may return a stale value or a value set in case of error which isn’t cleared.

As you mention, the common failures for Shell_NotifyIcon are when the communication with Explorer times out or occurs before Explorer is listening. As mentioned in the comments for Shell_NotifyIcon, in the timeout case GetLastError will usually return ERROR_TIMEOUT (a stale error code inherited from the internal SendMessageTimeout call). Since you aren’t getting that your error probably occurs earlier.

You mention that this occurs when debugging on your laptop: does it only occur when debugging or does it occur always? Is there anything different about the debugging environment on the two systems? Are you running the debugger elevated on one but not the other? If ERROR_NO_TOKEN is relevant it sounds like something related to security tokens: is your app doing any impersonation here?

Have you tried debugging into the call to Shell_NotifyIcon? It’s a fairly simple call, and if you can step through and find which internal function fails it may suggest a solution. You can get Windows symbols from the Microsoft Symbol Server. If you’re using VS 2010 then there is a checkbox to do this automatically on the Debugging Symbols property page. Otherwise see Using the Microsoft Symbol Server

Источник

Thread: Question about Shell_NotifyIcon function — error 1008

Thread Tools
Display

Question about Shell_NotifyIcon function — error 1008

When calling the Shell_NotifyIcon function with the NIM_ADD message the function succeeds, but I still get error code 1008 (ERROR_NO_TOKEN).

I did a search on the internet and it appears to have something to do with uID member and icon, but otherwise can’t find anything useful.

Last edited by Peter Swinkels; Dec 9th, 2012 at 11:17 AM .

  • VBForums
  • Visual Basic
  • API
  • Question about Shell_NotifyIcon function — error 1008

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  • BB code is On
  • Smilies are On
  • [IMG] code is On
  • [VIDEO] code is On
  • HTML code is Off

Click Here to Expand Forum to Full Width

Advertiser Disclosure: Some of the products that appear on this site are from companies from which TechnologyAdvice receives compensation. This compensation may impact how and where products appear on this site including, for example, the order in which they appear. TechnologyAdvice does not include all companies or all types of products available in the marketplace.

Источник

Shell notifyicon failed focusrite

Пожалуйста, выделяйте текст программы тегом [сode=pas] . [/сode] . Для этого используйте кнопку [code=pas] в форме ответа или комбобокс, если нужно вставить код на языке, отличном от Дельфи/Паскаля.

Соблюдайте общие правила форума

Следующие вопросы задаются очень часто, подробно разобраны в FAQ и, поэтому, будут безжалостно удаляться:
1. Преобразовать переменную типа String в тип PChar (PAnsiChar)
2. Как «свернуть» программу в трей.
3. Как «скрыться» от Ctrl + Alt + Del (заблокировать их и т.п.)
4. Как запустить программу/файл? (и дождаться ее завершения)
5. Как перехватить API-функции, поставить hook? (перехват сообщений от мыши, клавиатуры — внедрение в удаленное адресное прстранство)
. (продолжение следует) .
Внимание:
Попытки открытия обсуждений реализации вредоносного ПО, включая различные интерпретации спам-ботов, наказывается предупреждением на 30 дней.
Повторная попытка — 60 дней. Последующие попытки — бан.
Мат в разделе — бан на три месяца.
Полезные ссылки:
MSDN Library FAQ раздела Поиск по разделу Как правильно задавать вопросы

Выразить свое отношение к модераторам раздела можно здесь: Rouse_, Krid

Поставил на виртуалку XP все работает выводит Балун на 7’ке ноль эмоций! кто нить сталкивался с подобным?

Handling Shell_NotifyIcon failure

Shell_NotifyIcon will often fail when called during Windows startup (for instance, if your application is listed in HKLMSoftwareMicrosoftWindowsCurrentVersionRun. This appears to be because the system is busy starting applications. The failure is more common on low-spec computers or computers with some brands of antivirus software installed, which seem to be very intensive at startup.

Unfortunately, you cannot rely on the error code returned by GetLastError. When Shell_NotifyIcon returns false, some of the common errors returned by GetLastError are:
ERROR_FILE_NOT_FOUND (2)
ERROR_TIMEOUT (1460)
ERROR_SUCCESS (0)
The most appropriate response to any error returned by Shell_NotifyIcon is to sleep for a period of time and retry.

An explanation of why the error code may differ has been made by Paul Baker, paraphrased from http://groups.google.com/group/microsoft.public.platformsdk.shell/msg/59235b293cbf5dfa and http://groups.google.com/group/microsoft.public.platformsdk.shell/msg/73973287f15c03fc:

Shell_NotifyIcon actually calls SetLastError(0) initially. After that, basically it uses FindWindow to find the tray notification window. If this fails, it will typically return ERROR_FILE_NOT_FOUND. Otherwise it sends a WM_COPYDATA message to the tray notification window, using SendMessageTimeout with a timeout of only 4 seconds. If that message returns zero, then Shell_NotifyIcon will fail with GetLastError returning zero.

Источник

Windows 10 предлагает множество замечательных функций, улучшающих работу с Windows. Система состоит из небольших систем, работающих вместе, чтобы предоставить вам интуитивно понятную платформу для всех потребностей вашего компьютера.

Однако несколько пользователей недавно сообщили о получении ошибки события 1020 & amp; Ошибка 1008 Microsoft-Windows-Perflib в Windows 10, не позволяющая запустить уязвимое приложение и влияющая на производительность их компьютера.

Согласно жалобам, ошибка появляется без видимой причины. Нет никаких признаков того, что что-то не так до появления ошибки, например, зависания компьютера или сбоя приложений. Ошибка просто появляется внезапно.

Что еще более важно, не так много онлайн-перезаписей, чтобы узнать, как исправить ошибку события 1020 & amp; Ошибка 1008 Microsoft-Windows-Perflib в Windows 10. Эта ошибка разочаровала и смутила многих затронутых пользователей Windows, не знающих, как с ней бороться.

Совет для профессионалов: просканируйте свой компьютер на наличие проблем с производительностью, нежелательных файлов, вредоносных приложений и угроз безопасности
, которые могут вызвать системные проблемы или снижение производительности.

Бесплатное сканирование для ПК: проблемы с загрузкой 3.145.873Совместимость с: Windows 10, Windows 7, Windows 8

Специальное предложение. Об Outbyte, инструкции по удалению, лицензионное соглашение, политика конфиденциальности.

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

Что такое ошибка события 1020 & amp; 1008 Microsoft-Windows-Perflib Error

Не путайте. Это две разные ошибки: ошибка события 1020 и ошибка события 1008. Но обычно они происходят одновременно, и обстоятельства, связанные с этими ошибками, в основном одинаковы.

Вот сообщение об ошибке, которое вы можете встретить для события ошибка 1008:

img: Perflib
Категория: Нет
Тип: Ошибка
Идентификатор события: 1008

Процедура открытия службы «.NETFramework» в DLL «C: WINDOWS system32 mscoree.dll» завершилась неудачно с кодом ошибки. Система не может найти указанный файл. Данные о производительности для этой службы недоступны.

Вот сообщение об ошибке, которое может возникнуть при ошибке события 1020:

img: Perflib
Категория: Нет
Тип: Ошибка
Идентификатор события: 1008

Требуемый размер буфера больше, чем размер буфера, переданный в функцию сбора расширяемого счетчика DLL «C: Windows System32 perfts.dll» для службы. «LSM». Сообщенный размер буфера составлял 34184, а требуемый размер — 43160.

Эти ошибки могут возникать с любым другим файлом, а не только с mscoree.dll. Это также может произойти при обнаружении ошибки при проверке производительности других файлов DLL.

В приведенном выше сообщении это означает, что система не может найти файл mscoree.dll. Когда пользователь пытался найти файл с помощью odctr / r в Powershell (от имени администратора), появляется сообщение о том, что mscoree.dll был заменен из резервной копии. При запуске команды lodctr / q для вывода списка исправлений даже был указан файл mscoree.dll. Однако ошибка по-прежнему появляется после выполнения вышеуказанного устранения неполадок.

Затронутые пользователи отметили, что кроме этих ошибок, появляющихся в средстве просмотра событий, они не заметили ничего странного с компьютером; Все работало так, как должно, поэтому пользователи понятия не имели, что это могло их вызвать, а что не работало должным образом.

Однако, когда вы получаете любую из этих ошибок, у вас нет беспокоиться, потому что сама эта ошибка не имеет большого значения. Это просто способ Windows сказать, что он не может собирать данные о производительности. Это легкая часть. Избавиться от ошибок — совсем другое дело.

Что вызывает ошибку события 1020 & amp; 1008 Microsoft-Windows-Perflib Error?

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

Типичная задача процедуры открытия — прочитать из реестра, какой диапазон индексов объектов она поддерживает. Эти значения индекса хранятся в значениях реестра «Первый счетчик», «Первая справка», «Последний счетчик» и «Последняя справка» под ключом производительности приложения.

Если эта процедура Open не может прочитать данные (т. Е. Эти записи не существуют или были удалены процедурой удаления) событие 1008 или 1020 записывается в журнал событий.

Событие ошибки 1020 и 1008 обычно возникает из-за того, что список счетчиков поврежден и необходимая библиотека DLL отключена . Когда счетчику производительности не удается выгрузить строки для указанной службы, реестр может быть поврежден и отобразить эти ошибки perflib.

Как исправить ошибку события 1020 & amp; 1008 Ошибка Microsoft-Windows-Perflib

Хотя эта ошибка может быть не критичной для вашей системы Windows, получение уведомлений может раздражать, поэтому вы можете решить ее, используя приведенные ниже решения.

Исправление №1: Перезагрузите компьютер.

Первым шагом к исправлению любой ошибки является перезагрузка системы. Обычно это помогает устранить временные сбои на вашем компьютере. Нажмите кнопку питания, затем подождите несколько минут, прежде чем снова запустить его. Вы также можете попробовать загрузиться в безопасном режиме, чтобы узнать, связана ли ошибка со сторонним программным обеспечением.

Исправление №2: Удалите поврежденные файлы.

Другой базовый шаг по устранению неполадок включает запуск команды SFC в командной строке для проверки на наличие поврежденных файлов на вашем компьютере. Этот инструмент автоматически исправляет или заменяет поврежденные файлы, чтобы устранить любую ошибку, с которой вы можете столкнуться. Также рекомендуется очистить вашу систему с помощью Outbyte PC Repair, чтобы предотвратить появление новых ошибок.

Исправление №3: отредактируйте реестр.

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

  • Запустите редактор реестра (Regedt32.exe или Regedit.exe) и перейдите к следующему подраздел:
  • HKEY_LOCAL_MACHINE SYSTEM CurrentControlSet Services : Performance
  • Удалите значение «Открыть».
  • Перезагрузите компьютер, чтобы это изменение вступило в силу .
  • Исправление №4: перестроить счетчики производительности.

    Чтобы устранить эту проблему, заново создайте список счетчиков производительности.

  • Нажмите «Пуск».
  • Введите CMD в поиске bar.
  • Щелкните правой кнопкой мыши командную строку.
  • Выберите «Запуск от имени администратора».
  • Введите следующую команду и нажмите клавишу Enter — CD% SYSTEMROOT% System32
  • В командной строке введите lodctr /r.
  • Нажмите Enter.
  • Аналогично, для ошибки 1008 введите lodctr / e: и затем нажмите Enter.
  • Обратите внимание, что для выполнения этой процедуры требуется членство в локальной группе администраторов. Чтобы восстановить список счетчиков в реестре, выполните следующие действия.

  • Нажмите кнопку «Пуск» в Windows 10.
  • В появившемся поле поиска введите CMD или командную строку.
  • Когда параметр отображается, щелкните его правой кнопкой мыши и выберите параметр «Запуск от имени администратора».
  • Теперь в появившемся на экране окне командной строки введите следующую команду и нажмите клавишу Enter — cd% SYSTEMROOT% System32.
  • Снова введите следующую команду и нажмите клавишу Enter — lodctr /r.
  • Исправление № 5: повторно включите DLL.

    Аналогично, 1008 Microsoft -Windows-Perflib ошибка возникает, когда необходимая DLL отключена. Чтобы решить эту проблему, введите lodctr / e:

    Чтобы отключить одну или несколько DLL расширяемых счетчиков:

  • Запустите редактор реестра (RegEdt32.exe).
  • Перейдите к следующему поддереву реестра:
    HKEY_LOCAL_MACHINE System CurrentControlSet Services
  • Щелкните «Найти ключ» в меню «Просмотр».
  • Введите «Производительность» в качестве строки поиска, а затем выполните поиск оттуда.
  • для каждой найденной записи производительности выберите значение библиотеки и измените имя библиотеки, добавив к ней два префикса x ”: например, измените OrigLib.dll на xxOrigLib.dll
  • Когда вы сделаете каждую запись производительности в ключ CurrentControlSet Services, перезапустите Perfmon, чтобы проверить, работает ли он. Если это так, то повторите два вышеуказанных шага, восстанавливая только исходное имя библиотеки и пробуя Perfmon после каждого изменения, чтобы увидеть, какая библиотека вызывает ошибку.
  • Заключение

    Получение сообщения об ошибке 1020 & amp; Ошибка 1008 Microsoft-Windows-Perflib в Windows 10 раздражает, но это не критическая ошибка. Если вам не нужны счетчики производительности для службы, упомянутой в событии, вы можете отключить их с помощью инструмента exctrlst.exe (расширяемый список счетчиков производительности). Однако это всего лишь обходной путь, чтобы вы не получали эти уведомления. Если вы действительно хотите исправить эти ошибки, обратитесь к нашему руководству по устранению неполадок выше.


    YouTube видео: 5 способов исправить ошибку события 1020 1008 Ошибка Microsoft-Windows-Perflib в Windows 10

    02, 2023




    Иногда пользователи начинают видеть ошибку события 1020 & 1008 Microsoft-Windows-Perflib ошибка в Windows 10 без видимой причины. Что еще более важно, они понятия не имеют, что ремонтировать его. Сообщение об ошибке выглядит примерно так —

    Ошибка события 1020 или 1008 Ошибка Microsoft-Windows-Perflib

    1]Событие: 1008

    Не удалось выполнить процедуру открытия службы «.NETFramework» в DLL «C: WINDOWS system32 mscoree.dll» с кодом ошибки. Система не может найти указанный файл. Данные о производительности для этой службы будут недоступны.

    2]Событие: 1020

    Требуемый размер буфера превышает размер буфера, переданный в функцию Collect библиотеки DLL расширяемого счетчика C: Windows System32 perfts.dll для службы LSM. Заданный размер буфера составлял 34184, а требуемый размер — 43160.

    Решение этой проблемы требует некоторой работы. Следуйте инструкциям, приведенным ниже, чтобы исправить это — после создания точки восстановления системы.

    Сообщается о событиях ошибки 1020 и 1008, потому что список счетчиков поврежден и необходимая библиотека DLL отключена. Если счетчику производительности не удается выгрузить строки для указанной службы, реестр может быть поврежден и отобразить ошибку 1020. Чтобы устранить эту проблему, заново создайте список счетчиков производительности.

    1. Щелкните «Пуск».
    2. Введите CMD в строку поиска.
    3. Щелкните правой кнопкой мыши командную строку.
    4. Выберите Запуск от имени администратора.
    5. Введите следующую команду и нажмите клавишу Enter– CD %SYSTEMROOT%System32
    6. В командной строке введите lodctr /r.
    7. Нажмите Ввод.
    8. Аналогично для ошибки 1008 введите lodctr /e:<DLL name>, а затем нажмите ENTER.

    Обратите внимание, что для выполнения этой процедуры требуется членство в локальной группе администраторов. Чтобы восстановить список счетчиков в реестре, выполните следующие действия.

    Нажмите кнопку «Пуск» в Windows 10.

    В появившемся поле поиска введите CMD или Командная строка.

    Когда параметр отображается, щелкните его правой кнопкой мыши и выберите Запустить от имени администратора вариант.

    Восстановленный счетчик производительности

    Теперь в окне командной строки, которое появляется на вашем экране, введите следующую команду и нажмите клавишу Enter — cd %SYSTEMROOT%System32.

    Снова введите следующую команду и нажмите клавишу Enter — lodctr /r.

    Точно так же ошибка 1008 Microsoft-Windows-Perflib возникает, когда необходимая DLL отключена. Чтобы решить проблему, введите lodctr /e:</<DLL name> и нажмите ENTER (замените на имя файла библиотеки).

    Надеюсь, это помогло.

    Ошибка Microsoft Windows Perflib

    Понравилась статья? Поделить с друзьями:
  • Shell infrastructure host как исправить
  • Sheet set error set again
  • Sheet set error roland
  • She wear old jeans at home исправьте ошибки
  • She is living in london in present где ошибка