2013-02-27 3 views
0

Я использовал последующий код:Запуск сценария из Perl кода Exception

static void Main(string[] args) 
    { 
     ProcessStartInfo perlStartInfo = new ProcessStartInfo(@"C:\strawberry\perl\bin\perl.exe"); 
     perlStartInfo.Arguments = "c:\\ebm\\parse_ebm_log.pl"; 
     perlStartInfo.UseShellExecute = false; 
     perlStartInfo.RedirectStandardOutput = true; 
     perlStartInfo.RedirectStandardError = true; 
     perlStartInfo.CreateNoWindow = false; 

     Process perl = new Process(); 
     perl.StartInfo = perlStartInfo; 
     perl.Start(); 
     perl.WaitForExit(); 
     string output = perl.StandardOutput.ReadToEnd(); 
    } 

Теперь у меня есть это исключение, когда я смотрю в perl.MainModule: MainModule = 'perl.MainModule' выбросил исключение типа

база 'System.ComponentModel.Win32Exception' {System.SystemException} = { "только часть запроса ReadProcessMemory или WriteProcessMemory была завершена "}

Цель сборка x64 из-за предыдущее исключение в том же perl.MainModule, когда он говорит, не может запустить x64 на процессе x32 (что-то в этом роде)

+0

Работает ли Perl самостоятельно (не вызывается из .Net)? – m0skit0

+0

Что такое 'C: \ strawberry \ perl \ bin \ perl.exe -V: archname' (capital' V') – ikegami

ответ

1

попробуйте добавить Perl в PATH Enviroment (открыть новые окна оболочки после этого), а также с нижеследующими изменениями

ProcessStartInfo perlStartInfo = new ProcessStartInfo() 
perlStartInfo.FileName= "perl.exe" 
perlStartInfo.UseShellExecute = true 
+0

Привет, PATH уже есть. Я изменил код, но у меня такая же проблема. Дело в том, что мне нужно иметь «perlStartInfo.UseShellExecute = true», потому что я перенаправляю вывод сценария в строку на C#. Я также попробовал варианты кода. – JohnDoeKazama

+0

Я написал еще один простой скрипт с только функцией печати, и теперь он работает, поэтому проблема с памятью, вероятно, связана с скриптом perl. Ожидание нового скрипта и повторение одной и той же проблемы будет опубликовано. Спасибо. – JohnDoeKazama

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