Войти

Показать полную графическую версию : [решено] Как запустить msconfig в Windows 7 x64?


seriych
30-07-2010, 20:48
Вот скрипт, который должен запускать msconfig:
#requireadmin

if @OSVersion = "WIN_XP" Then
ShellExecute ( "msconfig.exe")
ElseIf (@OSVersion = "WIN_VISTA") OR (@OSVersion = "WIN_7") Then
ShellExecute ( "msconfig.exe")
Else
MsgBox (64, "", "ОС " & @OSVersion & " не поддерживается, настройте вручную")
EndIf
Exit
Вроде ничего особенного, но не работает, если в семерке включен UAC. Пишет 'не удается найти "msconfig.exe"'. Пробовал вместо "msconfig.exe" другие варианты: @WindowsDir & "\System32\msconfig.exe" или "msconfig.exe", "", @WindowsDir & "\System32" - везде та же ошибка. Если вместо ShellExecute использовать Run, то вообще ничего не происходит. Если UAC выключен или ОС 32-битная, то любые приведенные варианты работают (и с ShellExecute, и с Run).
msconfig.exe в 64-х битной семерке лежит там же, где и в 32-х.
Что я делаю не так?

Vadikan
30-07-2010, 21:19
Вроде ничего особенного, но не работает, если в семерке включен UAC. »
Для запуска msconfig повышение прав не требуется.

seriych
30-07-2010, 21:46
Vadikan,
Это часть скрипта. Повышение прав мне нужно в других местах. Но если убрать #requireadmin, то в плане msconfig ничего не меняется. Та же ошибка "не удается найти"

dwerf
30-07-2010, 22:20
Что я делаю не так? »
Проверьте, может там всё таки не лежит msconfig.exe

seriych
30-07-2010, 23:11
Лежит лежит. И прекрасно работает с выключенным UAC. С включенным UAC тоже работает, если запускать через консоль, через win+R, через батник (хоть по абсолютному пути, хоть просто msconfig)... А вот через AutoIt не запускается. Даже если в autoit скрипте вызываю батник, который только что работал при запуске напрямую, то в консоли пишет- файл не найден :(

Хотя не совсем так. Я тестировал с выключенным UAC на х32. Оказывается, на х64 и с выключенным таже история. Видимо, UAC тут ни при чем. Но как влияет битность, если пути одинаковы?
Вот пример запуска и свойства msconfig.exe:
http://s2.itrash.ru/idb/4ca30310a82aaf5fa7553292fa33aaf5/omsconfig.png
Батник с текстом start "" "%WinDir%\System32\msconfig.exe" работает как надо. Но если запустить его из под Autoit, то уже не работает:
http://s2.itrash.ru/idb/4ca30310a82aaf5fa7553292fa33aaf5/omsconfig2.png

Кажется, я понял в чем проблема!
msconfig - 64-битное приложение, а генерируемый интерпритатором код- 32-х битный. А винда вроде из 32-битных приложений запускает только 32-битные. Вот и не запускается 64-битый msconfig. Только возникает вопрос: как все же запустить 64-битное приложение?

seriych
02-08-2010, 23:13
Проблема решена. Дело оказалось именно в битности. Нужно отключить перенаправление системных папок:
$tValue = DllStructCreate('dword')
If @OSArch = 'X64' Then
DllCall('kernel32.dll', 'int', 'Wow64DisableWow64FsRedirection', 'ptr', DllStructGetPtr($tValue))
EndIf
ShellExecute(@WindowsDir & "\System32\msconfig.exe")
If @OSArch = 'X64' Then
DllCall('kernel32.dll', 'int', 'Wow64RevertWow64FsRedirection', 'ptr', DllStructGetPtr($tValue))
EndIf

scrade
28-08-2011, 14:16
это все очень просто, действия:

сочетание клавиш windows+R , дальше прописываем msconfig




© OSzone.net 2001-2012