Войти

Показать полную графическую версию : [решено] Настройка "Подключения по локальной сети" с помощью CMD


Страниц : 1 2 [3] 4 5

Petya V4sechkin
23-11-2011, 09:04
Проблема не с кодом, как я понял, а с WMIC на WinXP
оригинал XP SP3 VL + октябрьский UpdatePack
С какими аддонами? ExtremePack?
Смотрите версии файлов в папке \WINDOWS\system32\wbem
Cimwin32.dll и т. д.

boss911
23-11-2011, 10:04
С какими аддонами? »
Дефолтные + DirectX32, MRT_Mod-11.10.11, TcpIP-500 и Z_DRV_INST. ExtremePack никогда не юзал.

xml\wmi2xml.dll 5.1.2600.0
cimwin32.dll 5.105.1.2600.5512
CmdEvTgProv.dll 5.105.1.2600.5512
dsprov.dll 5.105.1.2600.0
esscli.dll 5.105.1.2600.5512
evntrprv.dll 5.105.1.2600.5512
fastprox.dll 5.105.1.2600.5755
framedyn.dll 5.105.1.2600.5512
fwdprov.dll 5.105.1.2600.0
krnlprov.dll 5.105.1.2600.5512
mofcomp.exe 5.105.1.2600.5512
mofd.dll 5.105.1.2600.5512
msiprov.dll 5.105.1.2600.0
ncprov.dll 5.105.1.2600.5512
ntevt.dll 5.105.1.2600.5512
policman.dll 5.105.1.2600.5582
provthrd.dll 5.105.1.2600.5512
repdrvfs.dll 5.105.1.2600.5512
scrcons.exe 5.105.1.2600.5512
smtpcons.dll 5.105.1.2600.0
stdprov.dll 5.105.1.2600.5512
tmplprov.dll 5.105.1.2600.0
trnsprov.dll 5.105.1.2600.0
unsecapp.exe 5.105.1.2600.0
updprov.dll 5.105.1.2600.0
viewprov.dll 5.105.1.2600.5512
wbemads.dll 5.105.1.2600.0
wbemcntl.dll 5.105.1.2600.5512
wbemcomn.dll 5.105.1.2600.5512
wbemcons.dll 5.105.1.2600.5512
wbemcore.dll 5.105.1.2600.5512
wbemdisp.dll 5.105.1.2600.5512
wbemess.dll 5.105.1.2600.5512
wbemperf.dll 5.105.1.2600.5512
wbemprox.dll 5.105.1.2600.5512
wbemsvc.dll 5.105.1.2600.5512
wbemtest.exe 5.105.1.2600.5512
wbemupgd.dll 5.105.1.2600.5512
winmgmt.exe 5.105.1.2600.0
winmgmtr.dll 5.105.1.2600.0
wmiadap.exe 5.105.1.2600.5512
wmiapres.dll 5.105.1.2600.5512
wmiaprpl.dll 5.105.1.2600.5512
wmiapsrv.exe 5.105.1.2600.5512
wmic.exe 5.105.1.2600.5512
wmicookr.dll 5.105.1.2600.5512
wmidcprv.dll 5.105.1.2600.5512
wmimsg.dll 5.105.1.2600.0
wmipcima.dll 5.105.1.2600.5512
wmipdskq.dll 5.105.1.2600.5512
wmipicmp.dll 5.105.1.2600.0
wmipiprt.dll 5.105.1.2600.5512
wmipjobj.dll 5.105.1.2600.5512
wmiprov.dll 5.105.1.2600.5512
wmiprvsd.dll 5.105.1.2600.5755
wmiprvse.exe 5.105.1.2600.5755
wmipsess.dll 5.105.1.2600.5512
wmisvc.dll 5.105.1.2600.5512
wmitimep.dll 5.105.1.2600.0
wmiutils.dll 5.105.1.2600.5512

Может дело в .NET 3.5 SP1 (с текущими на данный момент обновлениями)?

Petya V4sechkin
23-11-2011, 11:05
boss911, попробуйте отключить антивирус/файрвол (если установлен).
А также с помощью Msconfig (http://support.microsoft.com/kb/310560/ru) отключить сторонние (не Microsoft) программы и службы из автозагрузки.

fastprox.dll 5.105.1.2600.5755
policman.dll 5.105.1.2600.5582
wmiprvsd.dll 5.105.1.2600.5755
wmiprvse.exe 5.105.1.2600.5755
Для эксперимента замените их на SP3-версии 5.1.2600.5512

boss911
23-11-2011, 11:14
Petya V4sechkin

Выгрузка KIS12 ничего не дает. В msconfig я выбрал диагностический запуск, оно закричало, что не хватает прав остановить там какую-то службу и попросило, чтобы я зашел по админом (вообще-то я под админом сижу). ОС загрузилась "голой", выполнил данный код (http://forum.oszone.net/post-1310658-10.html):
ОШИБКА:
Код = 0x80070422
Описание = Указанная служба не может быть запущена, поскольку она отключена или все связанные с ней
устройства отключены.
Услуга = Win32
Я так полагаю, сработало. А теперь вот в какую сторону копать, что же такое мешает?

Для эксперимента замените их на SP3-версии 5.1.2600.5512 »
Это еще актуально, судя по тому, что описал выше?

Petya V4sechkin
23-11-2011, 15:17
Я так полагаю, сработало.
Нет, скорее всего, при "диагностическом запуске" служба "Инструментарий управления Windows" была отключена (надо включить).

Это еще актуально
Ну да, желательно выяснить, почему WMI не работает.

El Sanchez
23-11-2011, 19:43
Все сделал по инструкции »
служба "Инструментарий управления Windows" была отключена »
boss911, из всей той инструкции помогает только метод с перерегистрацией dll, но удалять репозиторий желательно (выяснил экспериментальным путем) и при отключенной службе "Инструментарий управления Windows". В запущенных случаях делаю так:

< nul Set /P "Str=Останов службы "Инструментарий управления Windows"..."
(SC Config winmgmt start= demand 1>nul 2>&1
Net Stop winmgmt /yes 1>nul 2>&1)&&Echo Done||Echo Failure

< nul Set /P "Str=Пересоздание репозитория CIM..."
(For /F "Tokens=*" %%A In ('Dir /B /AD "%WinDir%\System32\wbem\*Repository*"') Do RD /S /Q "%WinDir%\System32\wbem\%%A" 1>nul 2>&1
For /F "Tokens=*" %%A In ('Dir /B /A-D "%WinDir%\System32\wbem\*.dll"') Do Regsvr32 -s "%WinDir%\System32\wbem\%%A" 1>nul 2>&1)&&Echo Done||Echo Failure

После чего служба "Инструментарий управления Windows" должна сама запуститься.

boss911
24-11-2011, 00:23
Для эксперимента замените их на SP3-версии 5.1.2600.5512 »
Заменил, не помогло.

из всей той инструкции помогает только метод с перерегистрацией dll, но удалять репозиторий желательно и при отключенной службе "Инструментарий управления Windows". »
Я так и делал, только сверху еще переустанавливал через INI. Только что попробовал ваш код и перезагрузился, проблема с WMIC на месте.

Petya V4sechkin
24-11-2011, 09:58
В msconfig я выбрал диагностический запуск, оно закричало, что не хватает прав остановить там какую-то службу и попросило, чтобы я зашел по админом
Что-то препятствует нормальной работе Msconfig, обычно антивирус/файрвол (самозащита) или кривая служба (типа "Pml Driver HPZ12" от принтера HP).
"Диагностический запуск" не надо.
Надо:

отключить сторонние (не Microsoft) программы и службы из автозагрузки


Неизвестное исключительное состояние WMIC.
Какие строки добавляются в логи в папке \WINDOWS\system32\wbem\Logs при возникновении этой ошибки?
Еще можно с помощью Process Monitor (http://technet.microsoft.com/ru-ru/sysinternals/bb896645) помониторить (что происходит при ошибке), выложите лог (меню File -> Save) в архиве на любой файлообменник.

boss911
24-11-2011, 13:25
отключить сторонние (не Microsoft) программы и службы из автозагрузки »
Отключил всю автозагрузку, отключил все службы не относящейся к Microsoft, я даже отключал все службы, кроме "Инструментарий управления Windows", все равно получаю эту ошибку. С этими экспериментами убил KIS12 (не хочет интерфейс загружаться, пришлось снести).

Логи wbem (http://rghost.ru/31793841), логи Process Monitor (http://rghost.ru/31793871).

Проверил код (http://forum.oszone.net/post-1310658-10.html) у друга, у него работает. У него моя сборка XP SP3 VL + годичный UpdatePack (с тех пор обновы никакие не ставились) и очень похожий набор софта, как у меня, только у него, так же годичный NET 3.5 SP1.

Petya V4sechkin
25-11-2011, 10:15
boss911, пока что в логе Process Monitor заметил две странности:
1. Обращение к библиотеке C:\WINDOWS\system32\HookDll.dll (непонятно, к чему она относится).

2. Сразу две загруженных библиотеки:
C:\Program Files\AVerTV\msxml3.dll (версия 8.20.8730.1)
C:\WINDOWS\system32\msxml3.dll (версия 8.100.1052.0)

Первая в папке \Program Files\AVerTV явно не к месту.
Впечатление такое, что WMIC.exe после обращения к ней завершает работу (идут операции Thread Exit).

boss911
25-11-2011, 11:52
C:\Program Files\AVerTV\msxml3.dll »
Дарегил библиотеку и перерегистрировал C:\WINDOWS\system32\msxml3.dll , код (http://forum.oszone.net/post-1310658-10.html) заработал. Все же докопались, спасибо огромное.

Я так понимаю, разрабы AverTV 5.5.0.25 криво написали инсталлятор, по идеи тот должен был проверить наличие в системе msxml3.dll и если его нет, ставить и регистрировать из своего дистрибутива. Теперь придется ковырять их MSI (удалять его от туда). В папке AverTV есть еще msxml3a.dll и msxml3r.dll (у них нет DllRegisterServer), я так понял, это часть MSXML3, только не понятно, что за файл "а", их тоже грохать?

Насколько я понял, WMIC зависит от MSXML3, а у всех ли есть MSXML3, на каких ОС и на всех ли SP? В чистом XP SP3, точно знаю, что в составе есть.

boss911
25-11-2011, 13:49
Имеется два сетевых интерфейса:
Подключение по локальной сети
Подключение по локальной сети 2
Использую код:
for /f "tokens=2 delims==" %%a in ('wmic path Win32_networkadapter where ^"NetConnectionStatus^=2^" get NetConnectionID /value') do set NETWORK=%%a

echo %NETWORK%
В таком случае имя будет получено "Подключение по локальной сети 2". Вообще-то, в других случаях, оно всегда берет первое по списку имя, но не в этом случае, оно зараза берет второе по списку подключение - "Подключение по локальной сети 2" и хоть тресни, не понятно чего.

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

Iska
25-11-2011, 17:47
boss911, для получения нужной сортировки используйте «sort.exe». Но, думаю, дело не в этом.

Petya V4sechkin
25-11-2011, 18:31
В папке AverTV есть еще msxml3a.dll и msxml3r.dll (у них нет DllRegisterServer), я так понял, это часть MSXML3, только не понятно, что за файл "а", их тоже грохать?
Это ресурсные библиотеки, на систему уже не повлияют (если ссылок в реестре нет).

WMIC зависит от MSXML3
Судя по логу, использует для парсинга XSL-файлов в папке \WINDOWS\system32\wbem
От MSXML3 вообще много что зависит (например, IE и MMC).

у всех ли есть MSXML3, на каких ОС и на всех ли SP?
Список версий модулей синтаксического анализа XML Microsoft (MSXML) (http://support.microsoft.com/kb/269238/ru)

Все же докопались, спасибо огромное.
Не за что :)
Любопытный случай (казалось бы, при чем тут WMIC и AverTV). Можно (было бы) писать статью типа "Дело о неработающем WMIC" (в стиле Марка Руссиновича).

El Sanchez
25-11-2011, 18:39
Вообще-то, в других случаях, оно всегда берет первое по списку имя »
Сначала первую строку вывода, потом вторую и т.д. и в конце цикла переменная %a будет содержать значение последней строки вывода for. Поэтому:

set NETWORK=
for /f "tokens=2 delims==" %%a in ('wmic path Win32_networkadapter where ^"NetConnectionStatus^=2^" get NetConnectionID /value') do if not defined NETWORK set NETWORK=%%a
echo %NETWORK%

Iska
25-11-2011, 19:38
Любопытный случай (казалось бы, при чем тут WMIC и AverTV). Можно (было бы) писать статью типа "Дело о неработающем WMIC" (в стиле Марка Руссиновича). »
Я бы не отказался почитать Ваши статьи.

Поэтому: »
El Sanchez, это даже лучше, нежели было здесь (http://forum.oszone.net/post-1614493.html#post1614493). Для коротких циклов (понятно, что длинные циклы разбора многомегабайтных файлов быстрее будет — прерывать) самое оно. Пошло в «Избранное».

boss911
26-11-2011, 01:21
Любопытный случай (казалось бы, при чем тут WMIC и AverTV). »
Да тут дело не в AverTV, а более глобально - в криво написанных инсталляторах. Оно обязано проверить наличие нужной версии MSXML и только потом ставить или не ставить, иначе может быть конфликт версий, что приводит к сбоям в приложениях, что у меня и произошло. Ковырнул я их MSI, выдрал эти файлы, теперь больше не гадит при установке.

Сначала первую строку вывода, потом вторую и т.д. и в конце цикла переменная %a будет содержать значение последней строки вывода for. »
Я бы не сказал. Например, имеем:
Подключение по локальной сети
Подключение по локальной сети 2
оно всегда будет брать последнее. Провел эксперимент: назвал "Lan" и "Lan 2", оно взяло первое, потом я называл подключения по-разному, оно всегда брало первое по имени подключение, которое идет первым по списку, что логично (правда я тогда пробовал другой код, так как тогда у меня WMIC не работал). Мне, в принципе, так и нужно, чтобы брало всегда первое по списку имен подключение.

Спасибо. Сейчас нет возможности проверить ваш код (у меня одна сетевая), появится возможность, проверю и отпишусь. Только что проверил, теперь все работает, как мне нужно, еще раз спасибо.

boss911
26-11-2011, 05:16
El Sanchez

К сожалению, это метод (http://forum.oszone.net/post-1803347-55.html) работает по-разному. Если у меня между "Подключение" и "Подключение 2" выбирается первое, то на другом компе уже выбирается второе. Если использовать этот код (http://forum.oszone.net/post-1310658-10.html), то ситуация уже совсем противоположна будет. Я не понимаю, из-з чего это зависит. То есть, нет четкой уверенности, что всегда будет выбрано первое подключение по списку имен.

Дело в том, что на каждом компьютере по-разному выводит порядок NetConnectionID, если у меня так выводит:
NetConnectionID=Подключение 2
NetConnectionID=Подключение
то на другом компе порядок может быть иным (так оно и есть). Я не понимаю, из-з чего это зависит.

Если это возможно, помогите решить этот вопрос. Как к этому прикрутить SORT.EXE я не знаю.

Iska
26-11-2011, 06:08
for /f "tokens=2 delims==" %%a in (
'wmic path Win32_networkadapter get NetConnectionID /value ^| sort.exe'
) do echo %%a

1394-соединение
Подключение по локальной сети 2
Подключение по локальной сети 6
Подключение по локальной сети

На вышеприведённом коде сие будет выглядеть:
@echo off
setlocal enableextensions enabledelayedexpansion

set NETWORK=

for /f "tokens=2 delims==" %%a in (
'wmic path Win32_networkadapter where "NetConnectionStatus=2" get NetConnectionID /value ^| sort.exe'
) do if not defined NETWORK set NETWORK=%%a

echo %NETWORK%

endlocal
exit /b 0

boss911
26-11-2011, 11:52
for /f "tokens=2 delims==" %%a in (
'wmic path Win32_networkadapter get NetConnectionID /value ^| sort.exe'
) do echo %%a
Подключение 2
Подключение
В данном случае, сортировка явно боком работает, аналогично, если названо "Lan" и "Lan 2", первым в списке "Lan 2". Где тут логика или сортировка работает через одно место? Кстати, в вашем примере похожий случай.




© OSzone.net 2001-2012