Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   AutoIt (http://forum.oszone.net/forumdisplay.php?f=103)
-   -   [решено] Как запустить msconfig в Windows 7 x64? (http://forum.oszone.net/showthread.php?t=181800)

seriych 30-07-2010 20:48 1463809

Как запустить msconfig в Windows 7 x64?
 
Вот скрипт, который должен запускать msconfig:
PHP код:

#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 1463827

Цитата:

Цитата seriych
Вроде ничего особенного, но не работает, если в семерке включен UAC. »

Для запуска msconfig повышение прав не требуется.

seriych 30-07-2010 21:46 1463843

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

dwerf 30-07-2010 22:20 1463855

Цитата:

Цитата seriych
Что я делаю не так? »

Проверьте, может там всё таки не лежит msconfig.exe

seriych 30-07-2010 23:11 1463869

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

Хотя не совсем так. Я тестировал с выключенным UAC на х32. Оказывается, на х64 и с выключенным таже история. Видимо, UAC тут ни при чем. Но как влияет битность, если пути одинаковы?
Вот пример запуска и свойства msconfig.exe:

Батник с текстом start "" "%WinDir%\System32\msconfig.exe" работает как надо. Но если запустить его из под Autoit, то уже не работает:


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

seriych 02-08-2010 23:13 1465620

Проблема решена. Дело оказалось именно в битности. Нужно отключить перенаправление системных папок:
PHP код:

$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 1740942

это все очень просто, действия:

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


Время: 22:11.

Время: 22:11.
© OSzone.net 2001-