2009-12-03 77 views
0

我有一個命令行程序,它可以交互式地從DOS窗口中運行。當我嘗試從asp.net應用程序中執行相同的命令和參數時,它失敗。該網絡應用程序具有腳本&執行權限。出於測試目的,我對Everyone組完全控制了整個web app文件夾和包含.exe文件的文件夾(位於Program Files中)的控制權限。該Web應用程序正在使用Windows集成安全性(無匿名),所以它應該使用我的憑據,我是管理員。在WIndows XP中運行。從asp.net運行命令行.exe時出錯

下面的代碼運行該命令。文件名和參數看起來不錯。但是,p.ExitCode = 1而不是0.如何解決問題並找出過程失敗的原因?我在調試器中查看了進程,發現有一些'System.InvalidOperationException'異常,但這並沒有說明什麼。爲什麼InvalidOperationException?

Process p = new Process(); 
      p.StartInfo.FileName = filename; 
      p.StartInfo.Arguments = arguments; 
      p.StartInfo.CreateNoWindow = true; 
      p.StartInfo.UseShellExecute = true;   
      p.StartInfo.RedirectStandardOutput = false; 
      p.StartInfo.RedirectStandardError = false; 
      p.Start(); 
      p.WaitForExit(); 
      if (0 != p.ExitCode) 
      { 
       ApplicationException ex = 
        new ApplicationException(string.Format("\"{0} {1}\" returned ({2})", filename, arguments, p.ExitCode)); 
       throw ex; 
     } 

回答

0

有各種各樣的事情的應用程序可以做的時候被其他應用程序不幸遇到這會造成問題,沒有進一步的信息有太多的選擇。

您可能需要重定向標準輸出和/或標準錯誤以找出發生了什麼問題(或者,如果命令行程序是.NET,您的Windows事件日誌中可能有錯誤)。

對於一個簡單的測試,你可以做的簡單的東西:

p.StartInfo.RedirectStandardError = true; 
p.Start(); 
p.WaitForExit(); 
string err = p.StandardError.ReadToEnd(); 

請注意,你需要一個真正的構建更復雜的解決方案螺紋,彷彿控制檯應用程序寫入太多的數據標準錯誤會填充緩衝區並掛起。如果您需要,我可以爲您提供更強大的控制檯輸出解決方案,但這可能會爲您提供調試信息。

+0

運行後.exe不會輸出任何內容。當它成功運行時,它將返回到dos提示符。 – 2009-12-03 04:08:11

+0

我在想,也許在出現錯誤的情況下,控制檯應用程序可能實際上會給出一些輸出(就像一個未處理的異常冒泡到命令提示符一樣)。如果不知道它在做什麼,那是無效的,這很難說清楚。一種可能的可能性是它試圖做一些事情,要求它實際上有一個窗口(例如等待用戶輸入,或者更加模糊地請求窗口句柄)。根據不同的應用程序調用時,它可能會輸出一些線索,爲什麼... – fyjham 2009-12-03 04:52:22

0

的Web應用程序使用的是Windows 集成安全(無匿名),因此 它應該使用我的憑據,我 管理員

不,那是不正確的。除非啓用ASP.NET模擬,否則工作進程仍在ASPNET中運行,用於Windows XP默認設置。