Я использую Altar's GetDOSOutput()
(вариант 1) до this question для вызова dos-команд с помощью простой программы delphi. Тем не менее, существующая программа DOS, такая как DiskPart, не может быть найдена при вызове CreateProcess, тогда как при вызове из DOS-запроса (Windows Server 2003 X64) они не представляют проблем. Что может быть причиной этого?Почему cmd.exe в CreateProcess ведет себя отличным от DOS-подсказки?
командной строки: `ListVolumes.bat»
ListVolumes.bat:
path
C:\WINDOWS\SYSTEM32\DiskPart.exe /s ListVolumes.scr
dir C:\WINDOWS\SYSTEM32\DiskPart.exe
выход через программу вызова:
I:\PartScan>path
PATH=C:\WINDOWS;C:\WINDOWS\System32;C:\WINDOWS\System32\wbem;C:\Program Files (x86)\Borland\Delphi7\Bin; C:\Program Files (x86)\Borland\Delphi7\Projects\Bpl\;
I:\PartScan>C:\WINDOWS\SYSTEM32\DiskPart.exe /s ListVolumes.scr
'C:\WINDOWS\SYSTEM32\DiskPart.exe' is not recognized as an internal or external command,
operable program or batch file.
I:\PartScan>dir C:\WINDOWS\SYSTEM32\DiskPart.exe
Volume in drive C is system
Volume Serial Number is 351F-0221
Directory of C:\WINDOWS\SYSTEM32
File Not Found
вывода при вызове из командной строки DOS (обратите внимание на конечный dir):
PATH=C:\WINDOWS;C:\WINDOWS\System32;C:\WINDOWS\System32\wbem;C:\Program Files (x86)\Borland\Delphi7\Bin; C:\Program Files (x86)\Borl
and\Delphi7\Projects\Bpl\;
I:\PartScan>C:\WINDOWS\SYSTEM32\DiskPart.exe /s ListVolumes.scr
Microsoft DiskPart version 5.2.3790.3959
Copyright (C) 1999-2001 Microsoft Corporation.
On computer: ISOETES
Volume ### Ltr Label Fs Type Size Status Info
---------- --- ----------- ----- ---------- ------- --------- --------
Volume 0 F DVD-ROM 0 B Healthy
...
Volume 11 G DVD-ROM 0 B Healthy
I:\PartScan>dir C:\WINDOWS\SYSTEM32\DiskPart.exe
Volume in drive C is system
Volume Serial Number is 351F-0221
Directory of C:\WINDOWS\SYSTEM32
17-Feb-2007 08:17 263,680 diskpart.exe
1 File(s) 263,680 bytes
0 Dir(s) 33,111,334,912 bytes free
Было бы здорово, если бы мы могли перестать звонить в консольные приложения DOS-программ. DOS больше нет. –
Вернее, DOS все еще существует, но большая часть того, что называется DOS, действительно нет. – hvd
Решение прост, используйте папку [Sysnative] (http://www.samlogic.net/articles/sysnative-folder-64-bit-windows.htm) вместо каталога system32 ... – whosrdaddy