Device Manager (Диспетчер Устройств) не открывается нормально из кода на Win10 1709

Дмитрий77

При программной установке "девайсов",у меня прога показывает юзеру Device Manager (Диспетчер Устройств), даб ему не сильно скушно было (что-то происходит, девайсы какие-то устанавливаются).В основе - командная строка, вот эта:
rundll32.exe devmgr.dll, DeviceManager_Execute
Код простенький, лет 10 ему, всегда и везде работал:
Shell_Net("rundll32.exe", "devmgr.dll, DeviceManager_Execute", ProcessWindowStyle.Normal)


 Public Sub Shell_Net(ByVal PathName As String, _
 Optional ByVal Parameters As String = vbNullString, _
 Optional ByVal Style As ProcessWindowStyle = ProcessWindowStyle.Normal)
 Dim ExecInfo As New ProcessStartInfo
 With ExecInfo
 .FileName = PathName
 .Arguments = Parameters
 .WindowStyle = Style
 End With
 Process.Start(ExecInfo)
 End Sub
На сборке Win10 v.1709 стал выводить msgbox (как на скриншоте),типа "диспетчер работает только для чтения"это при том что код всегда вызывается под администратором.Мне в принципе пофиг как он работает, моя цель его показать на экран и мне этот msgbox (который к слову еще и с кнопками в classic-стиле!!! MS жжет) нафиг не нужен.Пробовал другие варианты:
Shell("rundll32.exe devmgr.dll, DeviceManager_Execute", AppWinStyle.NormalFocus)

 Shell("cmd /c rundll32.exe devmgr.dll, DeviceManager_Execute", AppWinStyle.NormalFocus)
(что в общем тоже самое). На 1709 выводит это дебильное окно. Под админом!!! в том числе. До 1709 такого не было.А вот еслиПуск -> ВыполнитьПуск -> Командная строкаПуск -> Командная строка (администратор)и там вбить эту команду,то ничего подобного не выводится, просто запускает Device Manager.И че стало не хватать приложению? Привилегий каких?Есть идеи? (кроме идеи не пытаться вообще выводить диспетчер)
2 ответа

Дмитрий77

Дмитрий77,Сообщение окну по win api close?


Дмитрий77

Дмитрий77,Сообщение окну по win api close?
Не, эта хрень (в смысле диспетчер устройств) по другому закрывается:
'закрываем Диспетчер Устройств
 Shell_Net("cmd", "/c taskkill.exe /f /im mmc.exe", ProcessWindowStyle.Hidden)
(уродину - msgbox на 1709 эта команда кстати тоже закроет)по "win api close" ты его как ловить будешь? С учетом локализации?Короче разрулил, вот так выводит "диспетчер" без msgbox на 1709:
'открываем Диспетчер Устройств
 If sys_WinXP Or sys_Win2003 Then
 Try : Shell_Net("mmc.exe", "devmgmt.msc", ProcessWindowStyle.Normal) : Catch : End Try
 Else
 If sys_Win10 And Environment.OSVersion.Version.Build > 16298 Then ' 16299 == 1709 == Fall Creator Update
 Try : Shell_Net(<span>"mmc.exe"</span>, <span>"devmgmt.msc"</span>, ProcessWindowStyle.Normal) : Catch : End Try
 Else
 Try : Shell_Net("rundll32.exe", "devmgr.dll, DeviceManager_Execute", ProcessWindowStyle.Normal) : Catch : End Try
 End If
 End If
А вообще я этот код на XP еще использовалЯ вот честно уже не помню с какого перепоя я поменял "mmc.exe devmgmt.msc" на "rundll32.exe devmgr.dll, DeviceManager_Execute" начиная с висты.Но перепроверять на всем что между XP и 1709 неохота, поэтому сойдет двойное условие.