2009-09-09 3 views
1

Мне нужна помощь с кодом ниже. Я пытаюсь преобразовать файл AutoCAD из формата dwg в ​​формат dwf. Затем файл dwf загружается и открывается на клиентском компьютере с помощью java-апплета.ASP.NET: Выполнение внешнего исполняемого файла не работает

Команда, используемая для преобразования файлов DWG в командной строке является: C: \ Inetpub \ Wwwroot \ COR-Basic \ cadviewer \ конвертер \ ax2008.exe -i = "C: \ Inetpub \ Wwwroot \ тест \ контейнер \ DU38_EG00_070116.dwg»-o = "C: \ Inetpub \ Wwwroot \ COR-Basic \ cadviewer \ файлы \ DU38_EG00_070116.dwf" -f = DWF -модели -text

это работает, когда я ввожу текст команды в cmd.exe.

Но когда я называю это из моего приложения ASP.NET, это начинается только процесс, но процесс никогда не заканчивается ...

Я пытался добавить дополнительный пользователь, дали это разрешения пользователя полное, и полные разрешения на wwwroot, но он все равно не работает.

Кто-нибудь знает, что я делаю неправильно, или как я могу это сделать по-другому?

If System.IO.File.Exists(strDWGlocation) Then 
     Dim psiProcessSettings As Diagnostics.ProcessStartInfo = New Diagnostics.ProcessStartInfo 
     psiProcessSettings.FileName = strApplicationPath 
     psiProcessSettings.Arguments = " -i=""" & strDWGlocation & """ -o=""" & strOutputLocation & """ -f=dwf -model -text" 
     'ST-LAPTOP\converter 
     psiProcessSettings.UserName = "converter" 
     psiProcessSettings.Password = secureString 

     'StefanSteiger.Debug.MsgBox("Input location:" + strDWGlocation) 
     'StefanSteiger.Debug.MsgBox("Output location:" + strOutputLocation) 
     Response.Write("<h1>Argument1: " + psiProcessSettings.Arguments + "</h1>") 
     Response.Write("<h1>Pfad1: " + psiProcessSettings.FileName + "</h1>") 


     'psiProcessSettings.RedirectStandardInput = True 
     psiProcessSettings.RedirectStandardError = True 
     psiProcessSettings.RedirectStandardOutput = True 'Redirect output so we can read it. 
     psiProcessSettings.UseShellExecute = False 'To redirect, we must not use shell execute. 
     'psiProcessSettings.CreateNoWindow = True ' don't create a window 
     Dim pConverterProcess As Diagnostics.Process = New Diagnostics.Process 
     pConverterProcess = Diagnostics.Process.Start(psiProcessSettings) 'Create the process. 
     pConverterProcess.Start() 'Execute the process. 
     'Response.Write("<h1>" + Replace(pConverterProcess.StandardOutput.ReadToEnd(), vbCrLf, "<BR />") + "</h1>") 'Send whatever was returned through the output to the client. 

     'pConverterProcess.CancelOutputRead() 
     'pConverterProcess.CancelErrorRead() 
     'pConverterProcess.StandardInput.Close() 
     'Wait for the process to end. 
     'pConverterProcess.WaitForExit() 
     pConverterProcess.Close() 
     'Dim iExitCode As Integer = pConverterProcess.ExitCode() 
     pConverterProcess.Dispose() 
    Else 
     MyNamespace.Debug.MsgBox("No such file.") 
    End If 
+1

Об этом следует спросить у создателей ax2008. В частности, отображает ли приложение какой-либо пользовательский интерфейс при его запуске? –

+0

Нет, это не утилита командной строки. И он не запрашивает ввод, вы просто указываете параметры командной строки и нажимаете enter. –

+0

nice Q ............. –

ответ

0

Почему вы прокомментировали WaitForExit()?

Вы также можете попробовать установить EnableRaisingEvents в true.

По моему опыту, класс процесса довольно сложно работать при чтении стандартного вывода, попробуйте удалить любой код, который пытается перенаправить и чтение вывода

+1

Я прокомментировал это, потому что думал, что это источник ошибок. Но это не так. Я уже пробовал перенаправить перенаправление, но безрезультатно ... Я попробую использовать enableraisingevent. –

2

Это мой код, который делает подобную вещь, и это работает!

  process.StartInfo.FileName = toolFilePath; 
      process.StartInfo.Arguments = parameters; 

      process.StartInfo.UseShellExecute = false; // needs to be false in order to redirect output 
      process.StartInfo.RedirectStandardOutput = true; 
      process.StartInfo.RedirectStandardError = true; 
      process.StartInfo.RedirectStandardInput = true; // redirect all 3, as it should be all 3 or none 
      process.StartInfo.WorkingDirectory = Path.GetDirectoryName(toolFilePath); 

      process.StartInfo.Domain = domain; 
      process.StartInfo.UserName = userName; 
      process.StartInfo.Password = decryptedPassword; 

      process.Start(); 

      output = process.StandardOutput.ReadToEnd(); // read the output here... 

      process.WaitForExit(); // ...then wait for exit, as after exit, it can't read the output 

      returnCode = process.ExitCode; 

      process.Close(); // once we have read the exit code, can close the process 
+0

, но не в режиме интегрированного конвейера. Ну, только что выяснилось, мне нужно переключить IIS 7 на классический режим трубопровода, и он начинает работать. Забавная особенность ... –

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