2013-07-16 4 views
5

Windows 8.1 поставляется с функцией «SlideToShutdown». Я пытаюсь вызвать этот исполняемый файл программным путем. Я пробовал в C#, Shell() в VB и (void)system(); в C.

Он говорит об ошибке как 'C:\Windows\System32\SlideToShutdown.exe' is not recognized as an internal or external command, operable program or batch file.

Но в командной строке, когда я выполняю start C:\windows\system32\slidetoshutdown.exe, он отлично работает.Конкретный exe-файл нельзя назвать программным

enter image description here

Это моя программа C (названный a.c) назвать его

#include <stdlib.h> 
#include <stdio.h> 
int main() 
{ 
    (void)system("C:\\Windows\\System32\\SlideToShutDown.exe"); 
    return(0); 
} 

Пожалуйста, помогите мне.

+0

Что такое бирки? это похоже на C. – dandan78

+0

@ dandan78 OP пытался C#, VB.NET и C. Вероятно, он хочет решение на любом из этих языков. – Stijn

+0

@st вы правы, моя ошибка. – dandan78

ответ

1

Вы, вероятно, с помощью 64-разрядной версии Windows. Однако ваша программа представляет собой 32-битный процесс. Он подвергается file system redirection, он действительно будет выглядеть в каталоге c: \ windows \ syswow64 для программы. Домашний каталог для 32-разрядных исполняемых файлов. Там, где этого не существует.

Обходным путем является использование c:\windows\sysnative\slidetoshutdown.exe. «Sysnative» часть имени каталога будет сопоставлена ​​с system32 для 32-битного процесса. Вы также должны технически искать домашний каталог, это не обязательно c: \ windows. GetWindowsDirectory().

Если вы сделаете это в управляемом проекте, просто измените вкладку «Проект + Свойства», «Сборка», «Настройка платформы». Выделите AnyCPU, отключите опцию «Предпочитайте 32-разрядную» для VS2012 и выше. Это заставит вашу программу работать как 64-битный процесс и, следовательно, не будет перенаправляться. Теперь просто Process.Start («slidetoshutdown.exe») будет работать. Создание 64-битной C-программы тоже не сложно, просто измените целевую платформу на x64.

0

Вы, наверное, уже пробовали это, во всяком случае я предлагаю:

system("start C:\\windows\\system32\\slidetoshutdown.exe"); 

?

+0

Я пытался неработать .. !! –

+0

http://msdn.microsoft.com/en-us/library/96ayss4b%28v=vs.100%29.aspx? –

0

Try После

System.Diagnostics.Process.Start("start","C:\\windows\\system32\\slidetoshutdown.exe") 
+0

Это не работает. –

+0

Это выглядит так уродливо: D –

Смежные вопросы