2016-02-18 3 views
1

Я искал способ выполнить bat-файл из моего x ++-кода.
Я пробовал это approach, но когда мой код доходит до process.Start(), ничего дальше не происходит.
Использование WINApi::Shellexecute() не является возможным для меня, поскольку мне это нужно для запуска в пакетном режиме. Вот код, в котором я сейчас работаю:AX 2012, Как я могу выполнить .bat-скрипт из x ++

System.Diagnostics.Process    process; 
System.Diagnostics.ProcessStartInfo  processStartInfo; 
; 
new InteropPermission(InteropKind::ClrInterop).assert(); 

process = new System.Diagnostics.Process(); 

processStartInfo = new System.Diagnostics.ProcessStartInfo(); 
processStartInfo.set_FileName(@'‪C:\temp\testbat.bat'); 

process.set_StartInfo(processStartInfo); 

process.Start(); 

process.WaitForExit(); 



process.Close(); 

info('Done'); 
+4

Я не знаком с X ++, но, возможно, попробуйте запустить 'C: \ Windows \ system32 \ cmd.exe' с аргументами'/с "C: \ Temp \ testbat.bat" '? Сам пакетный файл не является исполняемым. Это просто связано с 'cmd.exe'. Если вы можете получить переменные среды, расположение 'cmd.exe' хранится в'% COMSPEC% '-' System.Environment :: GetEnvironmentVariable ('COMSPEC') '[Я бы предположил] (http: // stackoverflow. ком/а/28748207/+1683264). – rojo

ответ

0

Использование System.Diagnostics.Process from .Net;

System.Diagnostics.Process    process; 
System.Diagnostics.ProcessStartInfo  processStartInfo; 

new InteropPermission(InteropKind::ClrInterop).assert(); 

process = new System.Diagnostics.Process(); 

processStartInfo = new System.Diagnostics.ProcessStartInfo(); 
processStartInfo.set_FileName("C:\\temp\\testbat.bat"); 
//processStartInfo.set_Arguments("Value1 Value2 Value3"); 

process.set_StartInfo(processStartInfo); 

process.Start(); 

process.WaitForExit(); 

info("Finished"); 

Ссылка;

https://blogs.msdn.microsoft.com/czdaxsup/2009/04/23/how-to-execute-an-external-process-from-a-batch/

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