2013-07-16 11 views
5

System Windows 8.1 ma funkcję o nazwie "SlideToShutdown". Próbuję wywoływać programowo ten plik wykonywalny. Próbowałem Process.Start(); w C#, Shell() w VB i (void)system(); w C.

Mówi błąd jako 'C:\Windows\System32\SlideToShutdown.exe' is not recognized as an internal or external command, operable program or batch file.

Ale w wierszu polecenia po uruchomieniu start C:\windows\system32\slidetoshutdown.exe działa idealnie.Określonego pliku exe nie można nazwać programowalnym

enter image description here

To jest mój program C (nazwany A.c) to nazwać

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

Proszę mi pomóc.

+0

co jest z tagami? to wygląda jak C. – dandan78

+0

@ dandan78 OP wypróbował C#, VB.NET i C. Prawdopodobnie chce rozwiązania w dowolnym z tych języków. – Stijn

+0

@st masz rację, mój błąd. – dandan78

Odpowiedz

1

Prawdopodobnie używasz wersji 64-bitowej wersji systemu Windows. Twój program jest jednak procesem 32-bitowym. Podlega ona file system redirection, będzie faktycznie wyglądać w katalogu c: \ windows \ syswow64 dla programu. Katalog domowy dla 32-bitowych plików wykonywalnych. Gdzie nie istnieje.

Obejście to należy użyć c:\windows\sysnative\slidetoshutdown.exe. "Sysnatywna" część nazwy katalogu zostanie zamapowana na system32 dla procesu 32-bitowego. Powinieneś również technicznie wyszukać katalog domowy, niekoniecznie c: \ windows. Funkcja GetWindowsDirectory().

Jeśli wykonasz to w zarządzanym projekcie, po prostu zmień Właściwości projektu +, zakładkę Kompilacja, ustawienie celu platformy. Przysługuje AnyCPU, wyłącz opcję "Preferuj 32-bitową" dla VS2012 i wyższą. Co sprawi, że twój program będzie działał jako proces 64-bitowy, a zatem nie zostanie przekierowany. Teraz po prostu Process.Start ("slidetoshutdown.exe") będzie działać. Tworzenie 64-bitowego programu C również nie jest trudne, wystarczy zmienić platformę docelową na x64.

0

Prawdopodobnie już próbowała to, w każdym razie proponuję:

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

?

+0

Próbowałem nie działa .. !! –

+0

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

0

Spróbuj Po

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

To nie działa .. –

+0

To wygląda tak brzydko: D –

Powiązane problemy