2009-09-09 11 views
1

J'ai besoin d'aide avec le code ci-dessous. J'essaie de convertir un fichier AutoCAD du format dwg au format dwf. Ensuite, le fichier dwf est téléchargé et ouvert sur l'ordinateur client à l'aide d'une applet Java.ASP.NET: Exécuter un exécutable externe ne fonctionne pas

La commande utilisée pour convertir le fichier dwg sur la ligne de commande est: C: \ inetpub \ wwwroot \ COR-Basic \ cadviewer \ convertisseur \ ax2008.exe -i = "C: \ inetpub \ wwwroot \ test \ conteneur \ DU38_EG00_070116.dwg "-o =" C: \ inetpub \ wwwroot \ COR-Basic \ cadviewer \ fichiers \ DU38_EG00_070116.dwf "-f = dwf -model -text

cela fonctionne lorsque j'entre le texte de commande dans cmd.exe.

Mais quand je l'appelle de mon application asp.net, il ne commence le processus, mais le processus ne se termine jamais ...

J'ai essayé d'ajouter un utilisateur supplémentaire, ont donné cet utilisateur l'autorisation complète, et les autorisations complètes sur wwwroot, mais cela ne fonctionne toujours pas.

Quelqu'un sait ce que je fais mal, ou comment je pourrais le faire d'une autre manière?

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

Vous devriez demander aux créateurs de ax2008 à ce sujet. En particulier, l'application affiche-t-elle une interface utilisateur au démarrage? –

+0

Non, ce n'est pas un utilitaire de ligne de commande. Et il ne demande pas d'entrée, vous donnez simplement les paramètres de la ligne de commande et appuyez sur Entrée. –

+0

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

Répondre

0

Pourquoi avez-vous commenté le WaitForExit()?

Vous pouvez également définir la valeur EnableRaisingEvents sur true.

Dans mon expérience, la classe de processus est assez difficile de travailler avec la lecture de la sortie standard, essayez de supprimer tout code qui tente de rediriger et lire la sortie

+1

Je l'ai commenté parce que je pensais que c'est peut-être la source de l'erreur. Mais ce n'est pas le cas. J'ai déjà essayé d'omettre la redirection, mais en vain ... Je vais essayer d'utiliser enableraisingevent. –

2

Ceci est mon code qui fait une chose semblable, et travaux!

  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

mais pas en mode pipeline intégré. Eh bien, juste découvert, je dois passer IIS 7 en mode pipline classique, et il commence à travailler. Fonctionnalité drôle ... –

Questions connexes