Może nie masz zainstalowanego (lub zarejestrowanego) kontrolka ActiveX na swoim komputerze.
WScript.Shell
powinno się znaleźć w każdym systemie Windows:
var run=new ActiveXObject('WSCRIPT.Shell').Run("commands to run");
Jeśli istnieją przestrzenie w commands to run
, trzeba użyć cudzysłowia.
Edit
Zawartość poniżej jest głównie z MSDN: http://msdn.microsoft.com/en-us/library/windows/desktop/gg537745(v=vs.85).aspx
iRetVal = Shell.ShellExecute(
sFile,
[ vArguments ],
[ vDirectory ],
[ vOperation ],
[ vShow ]
)
Weźmy [vDirectory]
. Dokumentacja mówi: "W pełni kwalifikowany path of the directory
, który zawiera plik określony przez sFile .Jeśli ten parametr nie jest określony, używany jest bieżący katalog roboczy."
Oznacza to, że dla tego argumentu istnieje niepoprawna ścieżka (mająca na końcu .cmd.exe
). Również wszystkie przykłady tworzenia ActiveX są tak:
var objShell = new ActiveXObject("shell.application");
Zwróć uwagę na małe litery w "shell.application"
.
I 12 maja, dziękuję za pytanie. Nie wiedziałem wcześniej o tej kontroli ActiveX, wydaje mi się to bardzo przydatne.
EDIT II
Ale czy to rozumieć? Twój przykład działa idealnie w moim app:
objShell.ShellExecute("cmd.exe", "cd C: C:\\cd c:\\ext_file main.exe test.txt", "C:\\WINDOWS\\system32", "open", 1);
z trzema wyjątkami:
1) jeden wspomniałem na początku tej odpowiedzi o ścieżce
2) uciekł \
używane również w argumentach.
3) Ostatnim argumentem jest typ liczby, a nie ciąg.
'cd C:' prawie żadnego sensu, 'c: \' wystarczy. – kirilloid