OpenSCManager в OS Vista не работает

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
VKS
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 80
Зарегистрирован: 30.11.2006 (Чт) 15:40

OpenSCManager в OS Vista не работает

Сообщение VKS » 02.03.2007 (Пт) 16:44

Добрый день!
Помогите советом. Есть маленикая программа которая через ключ производит всякие операции над сервисами. Она отлично работала на WinXPsp2. Но проблема заключается в том, что она наотрез отказывается работать под Vista (любой модификации - ультимат, бизнес и также 32/64бит разницы не имеет). Сразу скажу что у пользоватеся под вистой административные права.

Я выяснил что проблема кроется в открытии менеджера сервисов с полным доступом:
hManager = OpenSCManager("", SERVICES_ACTIVE_DATABASE, SC_MANAGER_ALL_ACCESS)
где SERVICES_ACTIVE_DATABASE = "ServicesActive" и SC_MANAGER_ALL_ACCESS = (STANDARD_RIGHTS_REQUIRED _
Or SC_MANAGER_CONNECT Or SC_MANAGER_CREATE_SERVICE _
Or SC_MANAGER_ENUMERATE_SERVICE Or SC_MANAGER_LOCK Or _
SC_MANAGER_QUERY_LOCK_STATUS Or SC_MANAGER_MODIFY_BOOT_CONFIG).

естественно если я открываю например с параметром SC_MANAGER_ENUMERATE_SERVICE то hManager <> 0 но тогда я могу только прочитать наличие процессов и управлять ними доступа быть не может.

Я так понимаю виста режет комманду hManager = OpenSCManager("", SERVICES_ACTIVE_DATABASE, SC_MANAGER_ALL_ACCESS)


Подскажите пожалуйсте - есть ли возможность этот глюк обойти

З.Ы. рекомендовать мне отстать от vista делу не поможет. так как нужно программа с совместимостью NT,XP,Vista. Клиентам некий комплекс ставим.

Заранее спасибо за любой ответ!
Вложения
SRV_work.rar
здесь exe с описанием. Это на всяк случай чтобы было понятно зачем мне всё это нужно
(22.53 Кб) Скачиваний: 163
Последний раз редактировалось VKS 07.03.2007 (Ср) 10:00, всего редактировалось 1 раз.

VKS
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 80
Зарегистрирован: 30.11.2006 (Чт) 15:40

Сообщение VKS » 06.03.2007 (Вт) 21:28

С диспетчером сервисов разобрался, но появилась новая напасть с этой Виста:
hService = OpenService(hManager, "service", SERVICE_ALL_ACCESS)
hService всегда возвращает 0. lastdllerror выдаёт ошибку 5
SERVICE_ALL_ACCESS = STANDARD_RIGHTS_REQUIRED Or SERVICE_QUERY_CONFIG Or SERVICE_CHANGE_CONFIG Or SERVICE_QUERY_STATUS Or SERVICE_ENUMERATE_DEPENDENTS Or SERVICE_START Or SERVICE_STOP Or SERVICE_PAUSE_CONTINUE Or SERVICE_INTERROGATE Or SERVICE_USER_DEFINED_CONTROL
Пробовал даже с одним параметром (к примеру при старте - SERVICE_START=&H10) - результат тотже :(

Может хоть подскажите годе найти описание ошибок..


З.Ы. "service" подразумавается имя сервиса естественно (mysql etc.)
Последний раз редактировалось VKS 06.03.2007 (Вт) 21:38, всего редактировалось 1 раз.

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 06.03.2007 (Вт) 21:34

http://msdn.microsoft.com/library

5 - Отказано в доступе.
Утилита, показывающая, что означает номер ошибки, входит в VS и называется Error Lookup.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

VKS
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 80
Зарегистрирован: 30.11.2006 (Чт) 15:40

Сообщение VKS » 06.03.2007 (Вт) 21:50

Спасибо

Но как же быть? Ведь права у меня администратора.. Вы не в курсе в чём проблема может быть? Может вызывать нужно по другому? Ну тогда вся совместимость с сервисами по нулям будет... со старой XP..

сижу и :cry:


успокаивает что я не одинок :)
http://forums.techarena.in/showthread.php?t=594516

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 06.03.2007 (Вт) 22:17

Чисто для инетерса, попробуй открыть с READ_CONTROL и если получится запроси ACL через QueryServiceObjectSecurity. Можно позырить, чё там...

А UAC у тебя включен?
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

VKS
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 80
Зарегистрирован: 30.11.2006 (Чт) 15:40

Сообщение VKS » 06.03.2007 (Вт) 22:23

Разобрался!

Всё это изза этого @&%#$&@% UAC

То что у пользователя админские права - это до одного места - программу нужно эту стартовать с админскими прамами доступа отдельно - тогда всё работает на ура. И я так понимаю что это изза неизвестного производитеся - т.е. меня =) и никак это обойти нельзя. Или можно? =))

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 06.03.2007 (Вт) 22:47

Так по ссылке, которую ты привёл, и написано, как это обойти.

It looks like I need to create an
Application Manifest and rebuild the app with this in order to enable the
admin privileges necessary to execute the OpenService() call. Also, it
appears that I need to rebuild with Visual Studio 7 (I am currently using
Visual Studio 6) in order to include the Application Manifest. Finally, I
will also need to digitally sign the application.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

VKS
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 80
Зарегистрирован: 30.11.2006 (Чт) 15:40

Сообщение VKS » 06.03.2007 (Вт) 23:06

GSerg писал(а):Так по ссылке, которую ты привёл, и написано, как это обойти.

It looks like I need to create an
Application Manifest and rebuild the app with this in order to enable the
admin privileges necessary to execute the OpenService() call. Also, it
appears that I need to rebuild with Visual Studio 7 (I am currently using
Visual Studio 6) in order to include the Application Manifest. Finally, I
will also need to digitally sign the application.


Вначале не правильно понял - копался в правал юзера....
Т.е. другими словами манифест под VB6 сделать не получится. Темболее мне, т.к. я не представляю как это сделать.
И самый глупый вопрос: кто его должен в цифровой форме подписать? (Хотя это отнюдь не самый важный вопрос.


GSerg, спасибо что уделил время!!!

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 06.03.2007 (Вт) 23:33

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

VKS
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 80
Зарегистрирован: 30.11.2006 (Чт) 15:40

Сообщение VKS » 08.03.2007 (Чт) 23:29

Пожалуйста, не сочтите за флуд, но я нашёл способ запуска без манифеста =) правда очень извращённый и в своё время оч простой.Привёл пример сценария в файле. Смысл его в том, что если происходит запуск exe с bat, то запускать от администратора не нужно - работа с сервисами происходит корректно. И даже если запускать через промежуточный exe.

Я счастлив. Всем спасибо!!!
Вложения
test.rar
мой "извращённый" пример (в данном случае запуск произв. сервиса)
(125.96 Кб) Скачиваний: 1422


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 30

    TopList