Убился уже... Приложение стартует при автологине (сидит в Startup фолдере), вызывает NetWkstaUserGetInfo и та, скотина, возвращает ERROR_ACCESS_DENIED. Если приложение запускается "ручками" после логина, тогда все нормально. Взял уже тупой пример из MSDN, те-же яйца... Юзер обычный пользователь.
Здравствуйте, mcFactor, Вы писали:
F>Убился уже... Приложение стартует при автологине (сидит в Startup фолдере), вызывает NetWkstaUserGetInfo и та, скотина, возвращает ERROR_ACCESS_DENIED. Если приложение запускается "ручками" после логина, тогда все нормально. Взял уже тупой пример из MSDN, те-же яйца... Юзер обычный пользователь.
Если речь идет о Vista и выше, то это behavior by design. Все приложения, стартующие при автозагрузке получают Non Elevated Privilege. Если требуются "настоящие" админские права, то приложение необходимо стартовать, например, при помощи шедулера.
Здравствуйте, De-Bugger, Вы писали:
DB>Здравствуйте, mcFactor, Вы писали:
F>>Убился уже... Приложение стартует при автологине (сидит в Startup фолдере), вызывает NetWkstaUserGetInfo и та, скотина, возвращает ERROR_ACCESS_DENIED. Если приложение запускается "ручками" после логина, тогда все нормально. Взял уже тупой пример из MSDN, те-же яйца... Юзер обычный пользователь.
DB>Если речь идет о Vista и выше, то это behavior by design. Все приложения, стартующие при автозагрузке получают Non Elevated Privilege. Если требуются "настоящие" админские права, то приложение необходимо стартовать, например, при помощи шедулера.
Блин, ну какие привелегии нужны для получения информации о текущем пользователе, на локальном компе?
"The NetWkstaUserGetInfo function returns information about the currently logged-on user"
И все что NetWkstaUserGetInfo возвращает — это име юзера, домен (или имя локального компа, если он не в домене) и имя сервера... Не понимаю почему у М$ все через жопу сделано...
Здравствуйте, Jolly Roger, Вы писали:
JR>Здравствуйте, mcFactor, Вы писали:
JR>Боюсь, Вы чего-то не договариваете, сейчас специально проверил — в WinXP при смене пользователя отрабатывает без проблем
Ключевой момент, как я сказал — "Приложение стартует при автологине". Т.е. это когда логин пользователя происходит автоматически, после старта/рестарта системы. Собственно покопавшись еще выяснил закономерности:
— проблема возникает только при автологине
— проблемы нет если логиниться приходится ручками, т.е. набирать пароль
— проблемы нет при перелогине (т.е. login/logout/login)
– на одном компе (все WinXP SP3) NetWkstaUserGetInfo выдает ошибку, а на другом при вызове NetWkstaUserGetInfo приложение крэшается с runtime error
– если даже в М$-овском примере, в самом начале, поставить задержку и подождать 5-10 секунд после запуска теста (просто getch()), то... ВСЕ РАБОТАЕТ НОРМАЛЬНО
Собственно есть такое подозрение, что в момент запуска приложения из Startup фолдера какие-то сервисы еще не стартовали, отсюда и проблемы. Скорее всего все еще зависит от скорости самого компа. Я все делаю в виртуальных машинах, на моем реальном тест-боксе все нормально, а у одного из клиентов, софт работает на древних компах, которые используются как тупые терминалы, вот у этого клиента то-же сеть проблемы.
Здравствуйте, De-Bugger, Вы писали:
DB>Здравствуйте, mcFactor, Вы писали:
F>>Убился уже... Приложение стартует при автологине (сидит в Startup фолдере), вызывает NetWkstaUserGetInfo и та, скотина, возвращает ERROR_ACCESS_DENIED. Если приложение запускается "ручками" после логина, тогда все нормально. Взял уже тупой пример из MSDN, те-же яйца... Юзер обычный пользователь.
DB>Если речь идет о Vista и выше, то это behavior by design.
да нет, это обычная winxp sp3
...
F>Собственно есть такое подозрение, что в момент запуска приложения из Startup фолдера какие-то сервисы еще не стартовали, отсюда и проблемы. Скорее всего все еще зависит от скорости самого компа. Я все делаю в виртуальных машинах, на моем реальном тест-боксе все нормально, а у одного из клиентов, софт работает на древних компах, которые используются как тупые терминалы, вот у этого клиента то-же сеть проблемы.
Скорее всего в сервисах, не успевающих стартовать, и дело. А пока пароль ручками набираешь, время идет, и сервисы успевают стартовать.
Ну так и попробуйте вызывать эту функцию с интервалом скажем 1-3 секунды вызывать, в цикле с задержкой, до тех пор пока не сработает, или слишком много времени не пройдет.
Ну а если не срабовает за полминуты, значит не судьба.
Корявый вариант конечно, но имеет право на жизнь.